黑马程序员技术交流社区
标题:
关于指针的问题
[打印本页]
作者:
ios_fce
时间:
2014-4-25 23:05
标题:
关于指针的问题
#include <stdio.h>
int main()
{
*p=%d",p,*p);
int x=3;
int *pi;
*pi=x;
printf("x的地址是:%p\n",&x);
printf("pi的地址是:%p *pi=%d",pi,*pi);
}
复制代码
运行结果:
x的地址是:0x7fff509d3c2c
pi的地址是:0x7fff509d3c48 *pi=3;
为什么*p的值已经为3了,而p的值却不与x的地址值相同???
作者:
ios_fce
时间:
2014-4-25 23:07
PS : *p=%d",p,*p); 这一句是多余的,没完全删掉。
作者:
Freedam
时间:
2014-4-26 00:23
定义了指针int *pi;并且*pi=x;虽然在数值上x与*pi是相等的,但是pi是一个变量有自己的存储地址(只不过他是一个特殊的变量-指针变量)。而x也是一个变量也有自己的地址,所以两种变量都有自己的地址这是正常的打印结果。只有将pi = &x;这样写地址才相等。
作者:
NenKeer
时间:
2014-4-28 22:01
#include <stdio.h>
int main()
{
int x=3;
int *pi;
*pi=x; //*pi是pi这个指针所指向的地址里面的值,将x的值赋给*pi,并不会改变pi指向的地址,只是改变了里面的值
pi = &x //这句代码才是改变了pi的地址,把x的地址给了pi
printf("x的地址是:%p\n",&x);
printf("pi的地址是:%p *pi=%d",pi,*pi);
}
复制代码
原则上讲,你用了一个没有经过初始化的指针,这种野指针在C语言里是禁止的。
作者:
墨子
时间:
2014-4-29 15:19
指针变量p和变量x有各自的地址,你那句*pi=x只是把x内的值赋给了他 而且这么定义不准确的,要用pi=&x才对
作者:
godlike
时间:
2014-4-29 16:33
首先你对这个指针赋值是不标准的,指针是用来存储地址的,当你创建了一个指针时,它里边就会存一个地址值指向某个地址空间了;
*pi= x;//这句话是把x的值(也就是3)赋给了指针pi里存储的地址的地方;并没有把x的地址赋给pi;他两的地址当然不一样了
你如果这样赋值:pi = &x;//把x的地址值付给了指针pi,那么pi里存储的时x的地址了;打印结果就一样了;
作者:
xiaodixing
时间:
2014-4-29 17:18
你输出pi,pi是一个指针变量,那他本身就分配了一块内存,就有一个地址:x是一个整形变量,内存也给他分配了一个空间,也有一个地址(与pi的地址不一样)所以说输出之后他们肯定不一样!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2