A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ios_fce 中级黑马   /  2014-4-25 23:05  /  1793 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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的地址值相同???

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

6 个回复

倒序浏览
PS : *p=%d",p,*p);   这一句是多余的,没完全删掉。
回复 使用道具 举报
定义了指针int *pi;并且*pi=x;虽然在数值上x与*pi是相等的,但是pi是一个变量有自己的存储地址(只不过他是一个特殊的变量-指针变量)。而x也是一个变量也有自己的地址,所以两种变量都有自己的地址这是正常的打印结果。只有将pi = &x;这样写地址才相等。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
  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语言里是禁止的。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
指针变量p和变量x有各自的地址,你那句*pi=x只是把x内的值赋给了他 而且这么定义不准确的,要用pi=&x才对
回复 使用道具 举报
首先你对这个指针赋值是不标准的,指针是用来存储地址的,当你创建了一个指针时,它里边就会存一个地址值指向某个地址空间了;
*pi= x;//这句话是把x的值(也就是3)赋给了指针pi里存储的地址的地方;并没有把x的地址赋给pi;他两的地址当然不一样了
你如果这样赋值:pi = &x;//把x的地址值付给了指针pi,那么pi里存储的时x的地址了;打印结果就一样了;
回复 使用道具 举报
你输出pi,pi是一个指针变量,那他本身就分配了一块内存,就有一个地址:x是一个整形变量,内存也给他分配了一个空间,也有一个地址(与pi的地址不一样)所以说输出之后他们肯定不一样!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马