指针的强化
规律一:指针是一种数据类型
1) 指针也是一种变量,占有内存空间,用来保存内存地址,4个字节。
//测试指针变量占有内存空间大小
void mai()
{
int a = 10;
char *p1 = 100; //分配4个字节的内存
char ****p2 = 100;
printf("a:%d , p1:%d , p2:%d\n",sizeof(a),sizeof(p1),sizeof(p2));
//输出结果 a:2 , p1:4 , p2:4
}
2) 指针操作内存
1.在指针声明时,*号表示所声明的变量为指针
2.在指针使用时,*号表示 操作 指针所指向的内存空间中的值
3.*p相当于通过地址(p变量的值)找到一块内存;然后操作内存
4.*p放在等号的左边赋值(给内存赋值)
5.*p放在等号的右边取值(从内存获取值)
int *p3 = NULL;
p3 = &a;
*p3 = 20; //间接的修改a的值
//*就像一把钥匙 通过一个地址(&a),去修改a变量的标示的内存空间
int c = 0;
c = *p3; //c=20
//*p放在=号左边 写内存
//*p放=号的右边 读内存
printf("c:%d \n", c); //c:20
3) 指针变量和它指向的内存块是两个不同的概念
含义1: 给p赋值p=0x1111; 只会改变指针变量值,不会改变所指的内容,与内存空间没有关系;p = p +1; //p++
不断的给指针赋值,相当于不停的改变指针的指向
含义2: 给p赋值p=‘a’; 不会改变指针变量的值,只会改变所指的内存块的值
含义3: =左边p 表示 给内存赋值, =右边p 表示取值 含义不同!
含义4: =左边char *p
含义5: 保证所指的内存块能修改
4)指针是一种数据类型,是指它指向的内存空间的数据类型
含义1:指针步长(p++),根据所致内存空间的数据类型来确定
p++=(unsigned char )p+sizeof(a);
结论:指针的步长,根据所指内存空间类型来定。
注意: 建立指针指向谁,就把把谁的地址赋值给指针。图和代码和二为一。
不断的给指针变量赋值,就是不断的改变指针变量(和所指向内存空间没有任何关系)。