C语言与指针相关的类型声明

基础类型声明

int a = 1;  // int型变量a,初始化为1。
const int b = 1; // int型常量b,初始化为1,后续不可修改。
void add(int,int);  // void型函数,或称返回值为void的函数,具体还可以称为形参是两个int的返回void的函数。

普通指针声明

int b = 3;
int * a = &b;  // 声明指针变量a,初始化为b的地址,或称初始化指向b。
// a是指向int型数据的指针,所以称a是int型指针。
*a = 5;  // 此后b值为5。

注意, “*”出现在声明中时并不代表解析引用,只代表指针类型符,“*”出现在其它语句中才代表解析引用。

所谓解析引用,就是把指针变量中存储的地址解析,之后相当于 解析引用符和指针变量 结合成为了 指针变量存储的地址对应的变量 。指针的详细用法请见其它博客。

(解析引用是我自造方便理解的概念,实际其官方称呼为dereference ,即解除引用)

指针函数和函数指针

运算符优先级与结合性

菜鸟教程

void * malloc(int);  // 返回空类型指针的函数,一种指针函数。
// () 优先级最高,且结合性是从左往右,所以 malloc 先与()结合,声明 malloc 是一个函数。
// void 和 * 是优先级同级的类型符,但结合性是从右往左,所以 malloc 返回值是一个指针,且该指针是 void 类型的。

// malloc是程序申请内存时需要使用的函数,申请的内存空间首地址被装到一个空类型指针变量中返回以供使用。

int * func();  //返回int型指针的函数,一种指针函数。

void add(int,int);
void (*func_p)(int,int) = add;  // 声明函数指针并初始化指向函数add。
// ()优先级最高,且从左往右结合,故先看 (*func_p) 声明了 func_p 为指针,后续添加的类型符只能声明指针类型,也就是指针所指的数据的类型。
// (int, int) 声明指针类型为拥有相应参数的函数,最前面的 void 声明该函数返回值为 void。

指针数组和数组指针

[]作为数组声明符时与()作为函数声明符时的优先级和结合性一致。

int *a [];  // a 先与 [] 结合,声明 a 是一个数组。数组类型为int型指针。故a为int型指针数组。
int (*a)[];  // a 先与 * 结合,声明 a 是一个指针。指针类型为int型数组。故a为int数组指针。

指针常量和常量指针

const表示只读限制,当其右跟类型符时,const限定该类型为只读;另一种情况,const限定其左邻类型符“*”为只读。不论哪种情况,const是对数据类型的修饰,而不直接与变量名结合。

const int * a;  // 从 a 开始,* 从右往左结合先结合 a,声明 a 为指针。
// 接着,int 原本声明指针类型为整型,被 const 限定后声明指针类型为只读整型,即指针指向一个只读整型。
// 此时 a 是 整型常量指针。

int * const a;  // 从 a 开始,const 限定 *,* 原本声明 a 为指针,* 经过 const 限定后声明 a 为只读的指针
// 即 * const 共同声明 a 为指针常量,最后,该指针为 int 类型。
// 此时 a 是 整型指针常量。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值