《C专家编程》:分析C语言的声明

本文详细分析了C语言中容易混淆的声明方式,包括数组与指针的结合,const关键字的使用,以及不同声明如何影响指针的可读性和可修改性。特别是对只读指针和函数指针的声明进行了深入解读,帮助读者掌握C语言中高级指针的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一些比较容易搞混的声明:

char *p[20];
char (*p)[20];

第一种声明由于[]的优先级要高于*,所以p先与[]结合表示p是一个有20个元素的数组,这个数组的元素是指向char类型的指针

第二种声明由于()的优先级要高于[],所以p先与*结合表示p是一个指针,指向一个有着20个char类型的元素的数组

const int * grade
int const * grade
int *const grade

首先要明白const关键字并不能把变量变成常量!在一个符号前加上const限定符只是表示这个符号不能被赋值。也就是说它的值对于这个符号来说是只读的。

最后一种声明,表示指针是只读的,指针的指向不能发生改变,但指针指向的对象的值可以发生该变,即可以通过指针来修改指针指向的对象的值

int a = 3,b;
int * const p = &a //指针常量
//那么分为一下两种操作
*p= 9;//操作成功
p = &b;//操作错误

前两种声明是一样的,表示grade这个指针指向的对象是只读的,指针的指向可以改变,但不能通过指针来改变指针所指向的值

int a,b;
 const int *p = &a //常量指针
//那么分为一下两种操作
*p = 9;//操作错误
p = &b;//操作成功
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值