【C语言】指针的基本知识详细讲解(指针数组、数组指针、函数指针....
���着上次的函数的基本知识,今天我们来讲一讲🔍指针
目录
一、指针的概念
二、指针变量
三、野指针
四、字符指针
五、指针与数组
六、指针数组
七、数组指针
八、指针与函数
总结
一、指针的概念
1.1、变量和地址
所谓指针,也就是内存的地址;所谓指针变量,也就是保存了内存地址的变量。
总结:指针就是变量,用指针存放地址(口语中说的指针通常指的是指针变量)
1.2、指针变量和指针的类型
指针变量就是一个变量,它存储的内容是一个指针。在我们定义一个变量的时候,要确定它的类型。在定义指针变量时也是一样的,必须确定指针类型。int 变量的指针需要用 int 类型的指针存储,float 变量的指针需要用 float 类型的指针存储。
指针类型决定了:指针解引用的权限有多大与指针走一步走多大字节(步长)
整型指针+1跳过一个整型。字符指针+1跳过一个字符
二、指针变量
2.1、指针变量的定义及使用
(1)指针变量的定义
指针变量的定义形式如:数据类型 *指针名;例如:
int* x;//整型指针变量 float* f;//浮点型指针变量 char* ch;//字符型指针变量
指针的变量名分别是:x;f和ch。而int*;float*与char*分别是他们中存储的数据的类型。
(2)指针变量的使用
取地址运算符&:单目运算符&是用来取操作对象的地址。例:&i 为取变量 i 的地址。对于常量表达式、寄存器变量不能取地址(因为它们存储在存储器中,没有地址)。指针运算符*(解引用运算符 ):与&为逆运算,作用是通过操作对象的地址,获取存储的内容。例:x = &i,x 为 i 的地址,*x 则为通过 i 的地址,获取 i 的内容。
//声明了一个普通变量 a int a; //声明一个指针变量,指向变量 a 的地址 int *pa; //通过取地址符&,获取 a 的地址,赋值给指针变量 pa = &a; //通过间接寻址符,获取指针指向的内容 printf("%d", *pa);
2.2、指针运算
(1)指针与整数的加减运算
指针变量的自增自减运算。指针加 1 或减 1 运算,表示指针向前或向后移动一个单元(不同类型的指针,单元长度不同)。
(2)指针减指针
前提是两个指针指向同一个空间。
指针减指针得到两个指针间的元素个数
例: Arr[9]指向9与10中间部分(下标)
三、野指针
3.1概念:
野指针就是指针指向的为止是不可知的(随机的,不正确的,没有明确限制的)
3.2野指针的成因
(1)指针未初始化
(2)指针越界
如图:在第十次 访问时,可以进入到循环,相当于从第10个点向后访问4个字节,之后的字节不属于原数组,则越界了,则称为野指针。(只有在超出范围后,在会发生崩溃)
//越界访问 *int arr[10] ={ 0 }; int* p = arr; int i=0; for (i=0; i {1,2,3,4},{5,6,7,8},{9,10,11,12}}; int *p=a[0];//此处的p内存放的数组a第一行的地址。