黑马程序员技术交流社区

标题: 关于指针的问题 [打印本页]

作者: ios_fce    时间: 2014-4-25 23:05
标题: 关于指针的问题
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     *p=%d",p,*p);
  5.     int x=3;
  6.     int *pi;
  7.     *pi=x;
  8.     printf("x的地址是:%p\n",&x);
  9.     printf("pi的地址是:%p  *pi=%d",pi,*pi);
  10. }
复制代码


运行结果:
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
  1.     #include <stdio.h>
  2.     int main()
  3.     {
  4.    
  5.         int x=3;

  6.         int *pi;
  7.                  
  8.         *pi=x;         //*pi是pi这个指针所指向的地址里面的值,将x的值赋给*pi,并不会改变pi指向的地址,只是改变了里面的值
  9.                 pi = &x  //这句代码才是改变了pi的地址,把x的地址给了pi

  10.         printf("x的地址是:%p\n",&x);

  11.         printf("pi的地址是:%p  *pi=%d",pi,*pi);
  12.     }
复制代码


原则上讲,你用了一个没有经过初始化的指针,这种野指针在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