指针

Published on 2024-4-8

在计算机中,每一块内容都有一块存储空间,这块空间有自己的地址。指针作为一种变量,存储的就是所指对象的地址,在C语言中字符串和数组的变量名本身就是一个地址,即第一位元素的地址。

我们使用&加上变量名来获得元素的地址,例如元素a的地址取法为&a

下面,我们来定义一个指针变量p

int *p;

当然,可以养成好习惯,将新定义的指针令为空指针,即:

int *p=NULL;

之后在使用指针变量时,就会对其赋值,最简单的就是取成一个变量的地址:

p=&a;

一般情况下,指针分为4种数据类型如下:

int *ip;//定义一个整型指针ip
double *dp;//定义一个double型指针dp
float *fp;//定义一个浮点型指针fp
char *cp;//定义一个字符型指针cp

指针有3种主要的用法:

printf("变量a的地址为:%p",&a);
printf("指针变量ip所指的地址:%p",ip);
printf("指针变量ip所指的内存中存储的值:%d",*ip);

另外,根据指针是否为空指针又有判断语句,空则返回0,非空则返回1,下面一二两句等价三四两句等价:

if (!ip){…;}
if (ip==NULL){…;}
if (ip){…;}
if (ip!=NULL){…;}

值得提及的是,在调用自定义函数时,如果传入的是变量名或者常值,那么自定义函数中不会直接操作原变量,如果传入的是地址,则会直接操作地址所在的内存中的值,相当于前者自定义函数内使用的是局部变量,后者将传入变量当作全局变量处理。

指针有一个极其重要的应用,即动态数组