常量指针 指针常量

指针常量

int const *p;
表示P是一个指向常量的指针,这种情况下,编译器会讲p所指向的对象当作常量处理,即便不是常量。
所以无法改变其指向的对象的值,但是指针本身的值即其指向可以发生改变。

常量指针

int *const p
表示指针是一个常量,其本身值(即其指向)不可以修改,但是其指向的值(无论是常量还是变量)可以发生修改

常量指针常量(我也不知道是不是这么叫的)

const int *const p
表示指针是一个常量,其本身值(即其指向)不可以修改。其指向的目标也是一个常量,值也不可以修改。

const int a = 10;
int *p = &a;
*p = 100;
.c文件下虽然能编译成成功,a的值确实也修改了,但是会有警告。.cpp是直接报错。
所以还是要做到类型匹配,既然是常量,就不要去修改它的值。

所有的指针的值都是一个地址,所有的地址都可以认为是一个没来得及起名字的指针。

间接级别问题

char *a[10] 是一个指针数组
如果要定义一个指向该数组的指针,应该定义成二级指针 char **p = a;
否则会提示 char* 与 char**就间接级别不同

指针只能指向已经分配好的内存区域

char *p;
p = “hello world”;
内存先开辟一个空间,将常量字符串”hello world”写入该存储区域,然后将首地址赋值给p,那么此时p指向的是一个字符串常量。
此时不允许修改p指向的值。但是可以改变p的指向。
p = “hello boy”
通过打印地址可以发现,p的值发生了改变。

如果需要通过终端输入来给p赋值,那么需要提前分配内存
p = (char*)malloc(sizeof(char));
gets(p);
此时虽然编译可以通过,但是如果输入的字符串过长,有可能导致程序崩溃。
因为我们申请内存的时候只申请了一个字节的区域,如果该字节地址往后的区域
未占用我们可以一直输入,一旦我们输入的字符串长度过长,没有足够空白空间来存储就会崩溃。
所以在申请是应该尽可能了制定长度。
p = (char * ) malloc(sizeof(char)*1000);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值