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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

  1. #include <stdio.h>
  2. int main()
  3. {
  4.     //int *pi指针指向const int i常量的情况
  5.     const int i1 = 40;
  6.     int *pi;
  7.     pi = &i1; /* 这样可以吗?不行,VC下是编译错。*/
  8.     printf("i的地址是%p  pi的地址是%p\n",&i1,pi);
  9.     printf("%d\n",*pi);
  10.     *pi=23;
  11.     printf("i的地址是%p  pi的地址是%p\n",&i1,pi);
  12.     printf("*p=%d i1=%d\n",*pi,i1);
  13.    

  14. }
复制代码

i的地址是0x7fff5742fc2c  pi的地址是0x7fff5742fc2c
40
i的地址是0x7fff5742fc2c  pi的地址是0x7fff5742fc2c
*p=23   i1=40
地址相同,结果不同,为什么???

3 个回复

正序浏览
  1.     //int *pi指针指向const int i常量的情况
  2.     const int i1 = 40;                  //const限定变量不允许被改变。
  3.     int *pi;
  4.     pi = &i1;                           //你把const int * 给 int *所以会警告。 pi地址指向了i1地址
  5.     printf("i的地址是%p  pi的地址是%p\n",&i1,pi);
  6.     printf("%d\n",*pi);
  7.     *pi=23;                             //赋值,是不会改变地址的。
  8.     printf("i的地址是%p  pi的地址是%p\n",&i1,pi);
  9.    
  10.     printf("*p=%d i1=%d\n",*pi,i1);     //同理因为const所以输出*p=23, i1=40;
  11.     //这应该是C语言的一种机制吧,如果可以通过指针修改值,就没有const的必要了。不加const就可以输出i1=23;
复制代码
回复 使用道具 举报
const int i1 = 40; //因为被const修饰的是不能修改的 跟java中的final一样所以i1一直不会变的是40
    int *pi;
    pi = &i1;//我只能这样理解了 被const修改类似以宏定义 就是在编译时把i1都换成40 再在下面改就改不了啊
    printf("i的地址是%p  pi的地址是%p\n",&i1,pi);
    printf("%d\n",*pi);
    *pi=23;
    printf("i的地址是%p  pi的地址是%p\n",&i1,pi);
    printf("*p=%d i1=%d\n",*pi,i1);
回复 使用道具 举报
貌似这就是C的强大之处

1.jpg (147.47 KB, 下载次数: 28)

1.jpg
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马