C中的char stringA[LEN]和char*stringB[LEN]有什么区别
我读了一些类似的问题,但似乎没有一个能消除我的疑虑C中的char stringA[LEN]和char*stringB[LEN]有什么区别,c,arrays,string,pointers,C,Arrays,String,Pointers,我读了一些类似的问题,但似乎没有一个能消除我的疑虑 char* s = "Hello World!"; 我知道 char *s = "Hello world"; 使字符串不可变,而 char s[] = "Hello world"; 可以修改 我的疑问是,我是否真的做了charstringa[LEN]和字符*stringB[LEN]它们有什么不同吗?或者stringB是否又像以前一样变得不可变?它们没有相同的数据类型,更不具有可比性 charstringa[LEN]是长度为LEN的c
我知道char* s = "Hello World!";
使字符串不可变,而char *s = "Hello world";
可以修改char s[] = "Hello world";
我的疑问是,我是否真的做了charstringa[LEN]代码>和
字符*stringB[LEN]代码>它们有什么不同吗?或者
是否又像以前一样变得不可变?它们没有相同的数据类型,更不具有可比性stringB
FWIW,如果是
是长度为charstringa[LEN]
的LEN
数组。(字符的数组)char
是长度为char*stringB[LEN]
的LEN
数组。(字符char*
指针数组)char
char*s=“Hello world”
是指向不可修改的字符串文字的指针。指针本身当然可以更改。只能更改它指向的内容(值) 他们有什么不同吗 是的。s
变量和stringA
都是数组stringB
是大小为stringA
的LEN
数组,而char
是大小为stringB
的LEN
数组char*
和char
是两种不同的类型char*
只能保存一个长度为stringA
的字符串,而LEN
的元素可以指向stingB
的字符串数 还是像以前一样,LEN
再次变得不可变stringB
元素所指向的字符串是否可变取决于内存的分配方式。如果它们是用字符串文字初始化的stringB
那么它们是不变的。万一char* stringB[LEN] = { "Apple", "Bapple", "Capple"};
for(int i = 0; i < LEN; i++) stringB[i] = malloc(30) // Allocating 30 bytes for each element strcpy(stringB[0], "Apple"); strcpy(stringB[1], "Bapple"); strcpy(stringB[2], "Capple");
它们是可变的。它们不一样 这里的for(int i=0;i
是一个stringA
数组,这意味着打印char
将显示字母stringA[0]
:S
而在这里打印char stringA[] = "Something";
将显示stringB[0]
(指向字符的指针数组):某些内容
让我给你一个直观的解释: 如您所见,是一个由4个字符组成的数组,而a
是一个由4个字符指针组成的数组,每个指针指向C字符串的开头。这些字符串中的每一个都可以有不同的长度。原因 是不可变的,因为b
存储在RO(只读)内存中,所以当您尝试更改它时,它会抛出一个错误。将它声明为指向“数组”的第一个元素的指针并不是它不可变的原因。你似乎也有点困惑 假设你的问题正是你的意思 char* stringB[LEN] = {"ABC", "DEF"}; 假设你的意思和我想的一样 char* stringB[LEN] = {"ABC", "DEF"}; char stringA[LEN]=“你好,世界!”; char*stringB=malloc(LEN); strcpy(stringB,stringA);“Hello World!”
在这种情况下,stringB是可变的,因为它指的是可写内存。答案的第二部分应该包含stringB而不是StringA。区别在于数组是数组,指针是指针。指针不是数组,数组也不是指针。 char* stringB[LEN] = {"ABC", "DEF"}; char stringA[LEN] = "Hello World!"; char *stringB = malloc(LEN); strcpy(stringB, stringA);