将指针指向字符串字面量 和 指向数组

1 篇文章 0 订阅
1 篇文章 0 订阅

字面量

const char *p = "string"; // 一定要用const

此段代码将char指针指向字面量string。
string是只读不可写,所以需要const。
如果此时试图修改*p[0] or *p[1]… 是错误的。
因为string已经开辟了一个内存空间,指针指向的是string“常量”。

数组

char ar[] = "sentence";
char *p = at;

此段代码将指针p指向一个数组,实际意义是:
内存中本就有一个空间存放的是sentence常量,现如今开辟了一块新的内存(数组),
相当于是将sentence给复制到数组at中,从而修改*p只是修改数组,而不是修改“常量”。

char *a 与 char a[]的区别(转)
char* a是一个指针,根本没分配内存,他指向的”string” 是只读的,不能改变,你在下面给他赋值肯定是错的。而char a[]是一个数组,已经分配内存,是将”string” 复制到该内存里面,这个内存是可读写的 。
指针是不分配内存的,它指向的是系统的只读的内存,而数组是分配内存的,就是将系统的只读的内存里面的值复制到它的内存里面,因此可读写

char* p是定义的一个指针,他指向的字符串”string” 是存在不可修改的区域(代码区)的。
而char p[]是一个数组。他的内容存在栈区可以修改。
正确的操作应该是:
char * a = (char * )malloc(10);
strcpy(a, “string”);

  • 2
    点赞
  • 5
    收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

Deng199827

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值