C语言 - 指针

什么是指针

什么是指针?指针其实就是一个变量的内存地址。在使用指针之前,需要声明一个指针变量,指针变量声明格式如下:

type *var_name; //type:指针类型 *:指针符号 var_name:变量名

1. int *var_int; //声明一个int型的指针变量
2. float *var_float;  //声明一个float型的指针变量
3. double *var_double;  //声明一个double型的指针变量

如何使用指针

C语言 - 指针_第1张图片
指针1.png

指针的运算

C指针是一个用数值表示的地址。因此,可以对指针进行++,--,+,- 算术运算。指针的加减运算其实就是指向指针的下一个或上一个字节的地址。假如定义一个int类型的指针,因为int在内存中占4个字节,所以当int指针自增1或加1的时候,在不影响内存位置中实际值得情况下,移动指针到下一个内存位置,既是偏移了4个字节。(偏移的字节数根据类型来决定)

C语言 - 指针_第2张图片
指针2.png

指针变量进行减法运算时,指针地址向上偏移对应的字节个数

C语言 - 指针_第3张图片
指针3.png

指针数组

可以像声明一个普通数组一样来声明一个指针数组,只是指针数组要带上*号:

int *ptr[max];

指针数组与普通数组的操作无异,但是需要注意的一点就是,我们都知道指针变量存储的是内存地址,所以指针数组的元素也应该是内存地址,如果设置了指针数组的元素是一个常量值,那么就会报错.


C语言 - 指针_第4张图片
指针数组.png

指针指向的指针

指针可以指向指针,并且可以不限制的指向,如A指针指向B指针,B指针指向C指针,C指针指向D指针,可以这样一直指向下去.只是指针符号*的个数要对应指针的级别:

int *ptr; //1级指针
int **ptr; //2级指针
int ***ptr; //3级指针
int ****ptr; //4级指针

指针是一个变量,因此也需要开辟内存空间,有内存空间就会有内存地址.A指针指向B指针,其实就是B指针存储了A指针在内存中的地址,然后B指针自身又有内存中的地址.注意B指针自身的内存地址和B存储A指针的内存地址是不一样的.

C语言 - 指针_第5张图片
指针指向指针.png

你可能感兴趣的:(C语言 - 指针)