C语言指针总结
1.什么是指针?
1)可以存地址的变量(是变量有空间,可以存数据,地址也是数据)。
2)通过地址找到目标变量。
3)解引用就是目标变量。
指针就是变量,存放内存单元的地址(编号)。
*一个小的内存单元就是一个字节
对于32位的机器有32根地址线,每根地址线都有0或者1两种状态,所以就有2^32个地址,即4GB空间。
2.指针大小
在32位机器上是4个字节
在64位机器上是8个字节
3.指针类型
变量有不同的类型,所以指针也有不同的类型 定义方式:(说明存放什么类型的地址)type +
int *p=&a;
float *p=&a;
double *p=&a;
char *p=&a;
注意:指针+1(-1)表示加上(减去)一个它所指类型的大小,下面是验证这个结论的代码:

*指针±指针 表示两个指针间所经历的元素的个数。
*指针的类型决定了,对指针解引用时能操作几个字节,例如char *的指针解引用只能访问一个字节,int *解引用可以访问四个字节。
*规定:允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较
但是不允许与指向第一个元素之前的那个内存位置的指针进行比较。
4.指针和数组
- 指针和数组没有必然的关系
这里有一段代码:

由此可见:数组名和数组首元素的地址是一样的,即数组名表示的是数组首元素的地址。
5.二级指针
可以简单的理解为它指的变量是指针变量。
(指针也是变量,只不过指针是存地址的变量,它也有地址,存放指针变量地址的指针变量就是二级指针)
6.指针数组
顾名思义,指针数组是数组,不过是存放指针的数组。(也有类型)
注意:sizeof(数组名)此时数组名代表整个数组,所以计算出来的结果就是整个数组的大小
下面这段代码验证了这一点

另外&(数组名)这里的数组名也表示整个数组。
7.大小端
大端:数据的低位放在高地址处(简称:大大大)
小端:数据的低位放在低地址处(简称:小小小)
1933

被折叠的 条评论
为什么被折叠?



