指针详解

c语言相比其他高级语言来说,更接近于对计算机硬件的操作,而指针的应用更是为我们对硬件的操作插上了翅膀,所以指针是嵌入式编程不可少的一部分,在一定意义上说,指针是c语言的精髓。
欢迎加入嵌入式学习群:559601187

一、 什么是指针

在计算机中,数据时存放在内存中的,而内存其实就是一组有序字节组成的数组,一般以一个字节为一个内存单元,每个字节都有唯一的地址。cpu通过寻址的方式去查找内存中某个变量的位置,我们知道定义变量就是向CPU申请一个某一类型的空间,这个空间也有自己的地址,同样地址也需要一种类型去存储,C语言规定用指针类型的变量去存储地址类型。记住一点:指针就是地址,指针变量时存放地址类型的变量。

二、指针变量的定义

2.1 声明并初始化一个指针

可以保存地址值的变量称为指针变量,指针变量定义如下:

数据类型  *  变量名

这里的数据类型为基本数据类型、构造类型,指针变量的声明比普通变量的声明多了一个’ * ‘,运算符’ * '就是间接引用或间接寻址。例如:

int *p;        // 声明一个 int 类型的指针 p
char *p        // 声明一个 char 类型的指针 p
int *arr[10]   // 声明一个指针数组,该数组有10个元素,其中每个元素都是一个指向 int 类型对象的指针
int (*arr)[10] // 声明一个数组指针,该指针指向一个 int 类型的一维数组
int **p;       // 声明一个指针 p ,该指针指向一个 int 类型的指针

在上面的声明中:p就是一个指针变量,里面存着一个地址。
这里要注意**指针在使用前一定要初始化,否则就会指针就会变成野指针。初始化有3种方式:

/* 方法1:使指针指向现有的内存 */
int x = 1;
int *p = &x;  // 指针 p 被初始化,指向变量 x ,其中取地址符 & 用于产生操作数内存地址

/* 方法2:动态分配内存给指针 */
int *p;
p = (int *)malloc(sizeof(int) * 10);    // malloc 函数用于动态分配内存
free(p);    // free 函数用于释放一块已经分配的内存,常与 malloc 函数一起使用,要使用这两个函数需要头文件 stdlib.h

/*方法3:定义为NULL */
int *p=NULL;

指针的初始化就是给指针一个合理的指向,让程序知道往哪指,上述NULL是一个特殊的指针变量,相当于0。地址为0的内存一般都不允许访问,但是内存地址为0有一个重要的意义,它表明指针指向不指向一个可访问的内存地址。

2.2 指针的调用

访问内存空间,一般分为直接访问和间接访问。

如果知道内存空间的名字,可通过名字访问该空间,称为直接访问。由于变量即代表有名字的内存单元,故通。过变量名操作变量,也就是通过名字直接访问该变量对应的内存单元。

如果知道内存空间的地址,也可以通过该地址间接访问该空间。对内存空间的访问操作一般指的是存、取操作,即向内存空间中存入数据和从内存空间中读取数据。

在 C 语言中,可以使用间接访问符(取内容访问符)*来访问指针所指向的空间,例如:

int *p,a=3;//p中保存变量a对应内存单元的地址
p=&a;

在该地址 p 前面加上间接访问符 *,即代表该地址对应的内存单元。而变量 a 也对应该内存单元,故 *p 就相当于 a。

printf("a=%d\n",a); //通过名字,直接访问变量a空间(读取)
printf("a=%
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值