typedef 定义数组类型_当指针常量与常量指针遇上typedef和#define

首先,常量指针

:指向‘常量’的指针(翻译)

意思是不能通过该指针引用来修改指向的 某变量或常量 的值。(旨在保护变量)

const int *PtrConst; == int const *PtrConst;

(从该定义方式,也可以看出其名字是 常量 -> 指针)

如:

int a = 1;
int b = 1;
const int*ptr = &a;
*ptr = 2; // 错误
ptr = &b; //无错误

指针常量

:指针类型的常量(翻译)

int* const ptr == const (int*) ptr (这里十分重要,参见文末的define与typedef)

意思是不能改变指向的指针,也就是说在声明时必须对其进行初始化(旨在固定指针指向)

然后这家伙又分为两类:

  • 指向非常量的
int a = 1;
int b = 1;
const c = 1;
int* const ptr = &c //错误,不能指向常量(就像普通的指针不能用常量来赋值 int *ptr3=&c //错误)
int* const ptr1 = &a;//正确
*ptr1 = 2 ; //正确,可以修改值
ptr1 = b; // 错误,不能改变指向
  • 指向常量的
const int a = 1;
int b = 1;
const int* const ptr = &b; //正确 !!!
const int* const ptr1 = &a; //正确 !!! 不能更改指向,也不能修改值

typedef与#define

  • 原理与作用域
    #define是编译预处理指令,在编译前进行简单的字符替换,没有作用域的限制
    typedef是关键字,构成语句要加;结尾。是定义新的类型,作用域取决于所在的文件位置
  • 区别
    比如当这两者撞车指针的时候

be9d463e32c369a79a68ca4d9f93831b.png

PS:由此可见,*只是修饰类型(如int), 或者修饰指针名。所以在书写的时候不要将*写到const上,我就是被其他人这样的写法困惑了很久。。。

参考文章:

指针常量和常量指针的区别 - 虽千万人吾往矣-GKH - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值