一段源代码,要说的在注释里写了
指针变量前面 的“*”表示 该变量的类型 为指针型变量。(引自P223,谭浩强《C程序设计》第四版)这句话让我明白了指针一直混淆的两种声明方式(详见代码注释)
#include <stdio.h>
void main()
{
int a = 100;
//指针变量前面 的“*”表示 该变量的类型 为指针型变量。【所以不应是int* p】(引自P223,谭浩强《C程序设计》第四版)
int *p1;//定义性声明
p1 = &a;
printf("a=%d \n", *p1);
int *p2 = &a;//引用性声明
printf("a=%d \n", *p2);
//以上,有了基本类型,才能由定义开辟出相应的空间(比如int型)
int *p;
//*p = 100;//指针变量中只能存放地址【其实这是个野指针】(引自P224)注释掉,不然会报错
p = &a;
*p = 1;//将整数赋给p当前所指的变量
printf("a=%d \n", *p);
printf("a的地址=%o \n", p);//以八进制输出地址
printf("p的地址=%o \n", &p);//取地址运算符&。访问 p指针变量的地址
printf("p所存的东西=%d \n", *p);//直接访问运算符*。访问 p指针变量 所存的地址 地址里所存的东西 并以%d形输出
printf("p地址&p=%o里是a的地址&a=%o(p=%o)里存着值*p=%d\n",&p,&a,p,*p);
int *temp;
//*temp = *p;//注释防错
/*野指针 对*temp赋值是向一个未知的存储单元赋值【temp没具体位置】,
而这个未知单元可能存着一个有用的数据,从而可能破坏系统正常工作状况(P227)*/
}
来看看我用visio画的解释图吧~
变量有:变量名、变量地址、变量存的同变量格式一样格式的内容
指针就是地址,最坚实基础实在的玩意,用指针(也就是地址)就可以非常自由的访问数据,比如我就能用**&p访问*p(虽然平时不可能这么用)。