1.指针定义
是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。
2.指针类型
指针类型决定了指针进行解引用操作的时候,能够访问空间的大小。如int* p,*p能够访问4个字节;char* p,*p能够访问1个字节。
指针类型同样决定了指针走一步走多远(即指针的步长)。如int* p,p+1可以走4个字节;char*p,p+1可以走1个字节。
3.野指针
指针指向的位置是不可知的、随机的、不正确的、没有明确限制的。不初始化、越界访问、空间被释放等都会导致野指针。
如何避免野指针?
(1)指针初始化;
(2)小心指针越界;
(3)指针指向空间释放即使置NULL;
(4)指针使用之前检查有效性。
4.指针的运算
(1)指针加减整数
#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
int* p = arr;
for (i = 0; i < 5; i++)
{
printf(" %d", *p);
p += 2;//指针加减整数
}
return 0;
}
(2)指针减指针
#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
printf("%d\n", &arr[0]-&arr[9]);//指针减指针
return 0;
}
5.二级指针
#include<stdio.h>
int main()
{
int a = 10;
int* pa = &a;
int** ppa = &pa;//ppa是二级指针
printf("%d\n", **ppa);
return 0;
}
6.指针数组
指针数组本质上是数组,是存放指针的数组。而数组指针本质上是指针。
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
int c = 30;
int* arr2[3] = { &a,&b,&c };//指针数组
int i = 0;
for (i = 0; i < 3; i++)
{
printf("%d\n", *(arr2[i]));//解引用操作
}
return 0;
}