天天看点

[传智播客]C++基础视频(深入浅出版)C语言提高-指针知识体系搭建

指针的强化

规律一:指针是一种数据类型

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);

结论:指针的步长,根据所指内存空间类型来定。

注意: 建立指针指向谁,就把把谁的地址赋值给指针。图和代码和二为一。

不断的给指针变量赋值,就是不断的改变指针变量(和所指向内存空间没有任何关系)。

继续阅读