————并不完善,会渐渐的补充————
目录
1指针是什么
- 指针是汇编语言中的一个对象,利用地址,指向存在电脑存储器中的另一个地方的值。由于通过地址能找到所需的变量单元,地址指向该变量单元。因此,将地址形象的称为指针。意思是通过它能找到以它为地址的内存单元。
int main() { int a = 10;//在内存中开辟一个空间 int* p = &a;//这里我们对变量a,取出它的地址,可以使用&操作符 //将a的地址存放到p变量中,p就是一个指针变量。int*表示定义p为整型指针。 return 0; }
==>指针就是变量,存放地址的变量。(存放在指针中的值当作地址处理)
(仿若别人可以根据门牌号(指针)找人(值))
- 指针的大小是固定的4/8个字节(32位平台/64位平台)
2指针和指针类型
指针类型决定了指针进行解引用操作的时候,能够访问空间的大小。
int*p; *p能够访问4个字节
char*p; *p能够访问一个字节
double*p; *p能够访问8个字节
指针类型决定了:指针走一步走多远(指针的步长),对应上边
在指针加减整数的时候体现。
3野指针
指针指向的位置不可知。
(1)三种情况
①指针未初始化
②指针越界访问
int main() { int arr[10] = { 0 }; int* p = arr; int i = 0; for (i = 0;i < 11;i++) { //当指针指向的范围超出数组arr的范围时,p就是野指针 *(p++) = i; } return 0; }
③指针指向的空间释放
int* text() { //返回为指针,定义指针类型 int a = 10; return &a; } int main() { int* p = text(); //在函数调用返回值后,变量a的地址被释放(可以理解为临时的) *p = 20; //此时访问该空间,可能发生冲突 }
(2)如何规避野指针
- ①指针初始化
如:=NULL
- ②小心指针越界
- ③指针指向空间释放即使置NULL
- ④指针使用之前检查有效性
if(p! = NULL)...
4指针运算
- 指针 加减 整数
- 指针 减 指针
得到的是中间的元素个数
- 指针的运算关系
比较地址大小
5指针和数组
(1)数组名:一般为数组首元素的地址;只有在&数组名和sizeof(数组名)时,数组名表示的是整个数组。
(2)
int arr[10]={1,2,3,4,5,6,7,8,9,10}; int* p=arr;
</