C代码中char*指针数组及static与const联合使用的作用疑问
示例代码
#include <stdio.h> static const char *strings[] = {"one","two","three","four","five", "six","seven","eight","nine"}; int main() { int n = 0; if (scanf("%d",&n) < 1) return 1; if (n >= 1 && n <= 9) printf("%s",strings[n-1]); else printf("Greater than 9"); return 0; }
问题解答
1. 此处使用char *指针数组而非普通字符串数组的作用
- 编码更便捷:不需要手动计算所有字符串的最大长度来定义二维数组的第二维长度,避免手动计算错误导致的数组越界、空间冗余问题。
- 内存占用更低:普通二维字符串数组需要按最长字符串的长度为每个元素分配统一空间,会产生大量无效填充空间;指针数组仅存储每个字符串字面量的地址,字符串本身存放在程序只读常量区无需额外拷贝,整体内存开销更小。
- 扩展性更强:后续如果需要修改数组内的字符串内容、调整字符串长度,不需要改动数组的定义;如果需要对数组元素做排序、交换操作,仅需交换指针地址,不需要移动整个字符串内容,执行效率更高。
2. 代码中同时使用static与const修饰该数组的原因
const修饰的作用:限定指针指向的字符串内容为只读,禁止通过数组元素修改字符串的值,既匹配字符串字面量本身的只读属性,也能避免代码误修改常量内容导致的运行异常。static修饰的作用:该数组定义在全局作用域下,static限定其作用域仅在当前源文件内可见,不会对外暴露全局符号,避免多文件编译链接时出现同名符号冲突;同时static修饰的全局变量存储在静态存储区,整个程序运行期间仅初始化一次,内存地址固定,访问效率更高。
内容的提问来源于stack exchange,提问作者noobie
相关产品推荐
相关产品推荐

