C语言中函数参数char str[][20]的含义是什么,为何要使用该写法?
关于
char str[][20]参数的含义及使用原因 具体含义
C语言中,当数组作为函数形参声明时,编译器会自动将其调整为对应类型的指针,因此你代码里的char str[][20]本质等价于char (*str)[20],即指向长度为20的char数组的指针:
- 第一维长度留空,代表该参数可以接收任意行数的二维char数组,行数由第二个参数
n指定 - 第二维固定为20,代表每一行存储的字符串最大长度为20字节(包含C语言字符串必须的
\0结束符,实际有效字符最多19个) - 函数内访问
str[i]时,编译器会自动按照20字节的步长计算地址,直接取出第i个字符串的首地址,刚好适配printf中%s格式符对字符串首地址的参数要求
选用该写法的原因
- 可读性更高:相比指针形式
char (*str)[20],二维数组的写法更直观,能直接体现该参数是用来接收一组固定长度的字符串列表,其他开发者看代码时能快速理解参数用途 - 降低开发出错概率:因为第二维长度固定,编译器会自动完成行偏移的计算,不需要开发者手动做指针运算,避免偏移计算错误的问题
- 适配场景需求:这段函数是用来打印名称列表,业务场景下名称长度普遍较短,固定每个字符串最大存储长度为20字节刚好满足需求,调用方直接定义二维char数组存储名称就能传入,不需要做额外的参数转换
调用示例参考
你可以参考如下方式调用该函数:
int main() { // 定义3个名称的列表,每个名称最大存储长度为20字节 char names[3][20] = {"Alice", "Bob", "Charlie"}; printlist(names, 3); return 0; }
内容的提问来源于stack exchange,提问作者Suhail Kakar
相关产品推荐
相关产品推荐

