指针常量和常量指针的区别

指针常量和常量指针的区别

一、指针常量

指针常量,指针的常量,指针用来修饰常量的,所以本质是一个常量,该常量是一个指针类型的常量(类似于整型常量,一个整型的常量)。

表示:char * const p;
(const 修饰 p ,所以 p 是一个常量,char * 表示一个指向字符型的指针,所以 p 表示指向字符型的指针的常量)

指针常量,指针本身是一个常量,始终指向某一固定地址,所以不能修改,p++ 是个错误表达,但是它指向的内容可以修改。

二、常量指针

常量指针,常量的指针,常量用来修饰指针的,所以本质是个指针变量,该指针变量指向的是一个常量。

表示:const char * p; (或 char const *p)
(const 修饰 char* ,表示一个字符型的常量指针类型,所以 p 是一个指向字符型常量的指针)

常量指针,指针指向的内容是不可修改的,但是因为本身是指针变量,所以自身是可以变动的 即 p++ 是可以的。

三、具体例子

1、指针常量
数组名,本质就是指针常量

char str[] = "hello";
//str++; //错误表达 
printf("%c %c",++*str,*str);
//输出 i h

因为是指针常量,所以 str++ 错误;
但是 str 指向的内容可以变化,所以 ++*str 就是 i 。

2、常量指针
当定义字符串指针时,可用常量指针

const char *str = "hello";
//若不写 const 也可编译通过,但是会有warning 	
// ++*str; //错误表达
printf("%c %c",*(++str),*str);
//输出 e h 

因为是常量指针,所以指针指向的内容不能修改;
但是指针自身可以 ++ 操作。
(因为 hello 是个字符串常量,所以若直接 char *str = “hello”,也是可以的,编译器会自动认为 str 为常量指针,但会有警告)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值