我相信大家在进行C/C++编程时,都遇到过这样的情况,即需要将二维数组作为实参来调用函数。代码如下所示:
#include <stdio.h>
void set_char(char *c[]){
c[0][0] = 'b';
}
int main(){
char c[10][10];
c[0][0] = 'a';
set_char(c);
printf("%c\n", c[0][0]);
return 0;
}
理所当然,我们可能第一眼认为输出值为 b。
然而,终端无情的给了你一个Segmentation fault(段错误)。不应该,难道不是输出 b吗???
到底是为什么呢?从终端给出的段错误提示来看,应该是地址访问非法。出现上述错误主要是我们对指针理解还是不够深。
首先注意set_char形参c的值等于主函数内数组c(二维数组)的首地址。然而的形参c是一个一维的指针数组,数组的每一个元素是一个指向char的8字节指针(此处以64位系统为例)。
c[0][0]