求助 ， 关于 C 语言 字符 串 数 组 函数 问题
楼主 ， 可以 查 查 “ 二 维 数 组 传 参 ” 相关 字眼 ， 有 相应 的 文章 说明 二 维 数 组 传 参 的 方法 。 下面 是 其中 一 种 方法 ： # include < stdio . h > # include < string . h > # define SIZE 256 # define LIM 2 void print _ string ( char st [ ] [ SIZE ] , int lim ) ; int main ( void ) { char input [ LIM ] [ SIZE ] = { " my " , " be " } ; print _ string ( input , LIM ) ; return 0 ; } void print _ string ( char st [ ] [ SIZE ] , int lim ) { int i ; for ( i = 0 ; i < lim ; i + + ) puts ( st [ i ] ) ; } 而 至于 你 上面 说 的 为什么 不 能 用 char * * str 作为 参数 ， 因为 当 把 这 种 二 维 数 组 的 指针 直接 作为 参数 传递 时 ， 数 组 名 退化 为 指针 ， 函数 并 不 知道 数 组 的 列 数 ， SIZE 对 它 来说 是 不 可见 的 ， 所以 第一 层 解 引用 会 失败 。 这时 ， 编译器 可能 会 报 warning ， 或者 运行 生成 的 文件 会 发生 segment fault 。 引用 网友 在 文章 的 图 说明 ： ( 链接 : http://www.cnblogs.com/wuyuegb2312/archive/2013/06/14/3135277.html ) 栈 上 分配 的 二 维 数 组 数 组 名 int array [ 3 ] [ 3 ] 的 真实 类型 是 int [ ] [ ] ， 在 作为 右 值 时 才 被 转化 为 ( int * array ) [ N ] ， 和 int * * 是 不同 的 。 把 前者 进行 强制 转换 为 后者 ， 在 函数 中 对 元素 操作 也 会 导致 段 错误 ， 上图 面 用 图 来 说明 二者 区别 。
