xiaohu168888 发表于 2016-2-16 16:17:14

指针什么时候可以赋值,什么时候不可以赋值

#include<stdio.h>

void main()
{
   int *p,i=100;
   *p = 20;
   p = &i;
   printf("*p=%d\n",*p);
      printf("%x\n",p);
      printf("i=%d\n",i);
      printf("%x\n",&i);
}
这个如果把 *p = 20;去掉,就可以打印出来,

void main()
{
      int i1 = 30;
      int i2 = 40;
      int *const pi = &i1;
      *pi = 80;
      printf("%d\n",*pi);
}
而这里*pi = 80;是没有问题的,怎么感觉有点晕了,越来越糊涂了。

人造人 发表于 2016-2-16 16:36:34

void main()
{
   int *p,i=100;
   *p = 20;
   p = &i;
   printf("*p=%d\n",*p);
      printf("%x\n",p);
      printf("i=%d\n",i);
      printf("%x\n",&i);
}


*p = 20;
   p = &i;
这两句写反了,应该是

p = &i;
*p = 20;

int *p,i=100; 这句中的 *p 只是说明 p 是个指针
*p = 20; 这句中的 *p 是引用 p 指向地址的内容

如果这样写
*p = 20; // 这里的 p 还没有赋值
p = &i;
p 就引用了一个 未知 的地址

void main()
{
      int i1 = 30;
      int i2 = 40;
      int *const pi = &i1;
      *pi = 80;
      printf("%d\n",*pi);
}

int *const pi = &i1;
*pi = 80;

这里的 pi 既说明是指针类型,又给pi 赋值为 i1 的地址,所以下面就可以使用 这句*pi = 80;

如果上面那个这样写也行
int i=100;
int *p = &i;

   *p = 20; // 这里的 p 已经赋值
   p = &i; // 上面已经给 p 赋值了,这里就不需要了,可以删掉,但是不删也不会影响程序运行

xiaohu168888 发表于 2016-2-16 17:10:13

哦,明白了,谢谢大师的指点。
页: [1]
查看完整版本: 指针什么时候可以赋值,什么时候不可以赋值