2.
int a=0,b=1;
int *pa,*pb; //指针并没有指向任何一个整型和字符型,所以理解成赋值为NULL(在stido.h中定义的零值的宏)
printf("a is %d,&a is %p,pa is %p\n",a,&a);
printf("b is %d,&b is %p,pb is %p\n",b,&b);
运行结果:pa is 000000
3.
int a=0,b=1;
char c='A';
int*pa,*pb;
char *pc;
pa=&a;
pb=&b;
pc=&c;
printf("a is %d,&a is %p,pa is %p,&pa is %p\n",a,&a,pa,&pa);
printf("b is %d,&b is %p,pb is %p,&pb is %p\n",b,&b,pb,&pb);
printf("c is %c,&c is %p,pc is %p,&pc is %p\n",c,&c,pc,&pc);
return0;
//指向某变量的指针变量,虽然指针变量中存放的是变量的地址,二者在数值上相等,但是在概念上变量的指针并不等同于变量的地址。
5.
间接寻址运算符:
int a=0,b=1;
char c='A';
int *pa=&a,*pb=&b;
char *pc=&c;
*pa=9; //修改指针变量pa所指向的变量的值
printf("a is %d,&a is %p,pa is %p,*pa is %d\n",a,&a,pa,*pa);
printf("b is %d,&b is %p,pb is %p,*pb is %d\n",b,&b,pb,*pb);
printf("c is %c,&c is %p,pc is %p,*pc is %c\n",c,&c,pc,*pc);
// *作为间接引用运算符,用于读取并显示指针变量中存储的内存地址所对应的变量的值,即指针变量所指向的变量的值,这两个用法之间其实并无关系。
6.
(1)永远清楚每个指针指向了哪里,指针必须指向一块有意义的内存;
(2)永远清楚每一个指针指向的对象的内容是什么;
(3)永远不要使用未初始化的指针变量;