黑马程序员技术交流社区

标题: tell me why......... [打印本页]

作者: ios_fce    时间: 2014-4-25 21:58
标题: tell me why.........
  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
地址相同,结果不同,为什么???
作者: blz01003hm    时间: 2014-4-25 22:15
貌似这就是C的强大之处

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

1.jpg

作者: gmadong@163.com    时间: 2014-4-25 22:15
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);

作者: 一只小菜鸟    时间: 2014-4-25 22:36
  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;
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2