【C语言】指针的基本知识详细讲解(指针数组、数组指针、函数指针....

小明 2025-05-03 17:09:53 8

���着上次的函数的基本知识,今天我们来讲一讲🔍指针

目录

一、指针的概念

二、指针变量

三、野指针

四、字符指针

五、指针与数组

六、指针数组

七、数组指针

 八、指针与函数

总结


一、指针的概念

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第一行的地址。
The End
微信