加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

存储在内存中的字符指针数组在哪里?

发布时间:2020-12-16 10:21:27 所属栏目:百科 来源:网络整理
导读:所以,如果我这样做: char * a = "hello"; “hello”存储在RODATA部分中并指向它.如果我做: char a[10] = "hello"; “hello”以10个字节的数组存储在STACK中,称为a. 当我这样做时会发生什么: char * a[10] = {"hello","hi"} 因此,我们有一个包含10个字符指
所以,如果我这样做:

char * a = "hello";

“hello”存储在RODATA部分中并指向它.如果我做:

char a[10] = "hello";

“hello”以10个字节的数组存储在STACK中,称为a.

当我这样做时会发生什么:

char * a[10] = {"hello","hi"}

因此,我们有一个包含10个字符指针的数组,这些指针将存储在STACK中.但是字符串文字怎么样?他们进入RODATA部分吗?
另外,argv也会发生同样的事情吗?

解决方法

char *a[10] = {"hello","hi"}

数组的元素是指向字符串文字的指针.作为任何字符串文字,它们也是不可修改的,并且实现可以将它们存储在只读存储器中.

*a[0] = 'g';   // undefined behavior,modifying a string literal
a[0] = "bla";  // ok,modifying the pointer

现在提出第二个问题:

Also,does the same thing happen with argv?

不,因为它们不是字符串文字.可以修改argv中的指针和指向的字符串.这是由C标准保证的.

(C99,5.1.2.2.1p2) “The parameters argc and argv and the strings pointed to by the argv array shall be modifiable by the program,and retain their last-stored values between program startup and program termination.”

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读