能否用char**存储字符串列表?C语言新手代码疑问求解
关于char**存储字符串列表的解释
首先明确:char 是指向字符指针的指针,用来存储字符串列表时,它指向的是一个 char* 类型的数组(每个元素都是字符串的首地址)。
你的代码里,rightArray 应该是一个字符指针数组(比如 char* rightArray[3];),这样才能存三个字符串的地址。你觉得 char** testRights = rightArray; 只拿到第一个元素,其实是误解:
- 当你把数组名
rightArray赋值给char**类型变量时,数组名会隐式转换成指向数组第一个元素的指针(也就是char**类型,因为数组元素是char*)。此时testRights和rightArray指向同一个起始位置,并不是只拿到第一个元素。 - 如果你直接用
printf("%s", testRights)打印,它会把testRights当作char*解析,自然只输出第一个字符串。但你可以通过下标或指针偏移访问所有元素:
正确访问示例代码
#include <stdio.h> int main() { char* rightArray[3]; rightArray[0] = "VIEW"; rightArray[1] = "EDIT"; rightArray[2] = "EXTRACT"; char** testRights = rightArray; // 下标访问 printf("%s\n", testRights[0]); // 输出 VIEW printf("%s\n", testRights[1]); // 输出 EDIT printf("%s\n", testRights[2]); // 输出 EXTRACT // 指针偏移访问 printf("%s\n", *(testRights + 0)); printf("%s\n", *(testRights + 1)); printf("%s\n", *(testRights + 2)); return 0; }
注意事项
- 字符串常量(比如
"VIEW")是只读的,不能修改它们的内容。如果需要可修改的字符串,得用char数组存储,比如char rightArray[3][10] = {"VIEW", "EDIT", "EXTRACT"};。 char**本身不会记录数组的长度,使用时要自己记住元素个数,避免越界访问导致程序崩溃或异常。
内容的提问来源于stack exchange,提问作者Noob_Coder13
相关产品推荐
相关产品推荐

