下列代码中,fun函数第一个参数char(* ss)[N]是什么意思?为什么要这么写?

#include <stdio.h>#include <string.h>#define M 5#define N 20int fun(char (*ss)[N], int *n){ int i, k = 0, len = N; for(i = 0; i < M; i++) { len = strlen(ss[i]); if(i == 0) *n = len; if(len < *n) { *n = len; k = i; } } return k;}int main(){ char ss[M][N] = {"shanghai", "guangzhou", "beijing", "tianjing", "chongqing"}; int n, k, i; printf("\nThe original strings are:\n"); for(i=0; i < M; i++) puts(ss[i]); k = fun(ss, &n); printf("\nThe length of shortest string is: %d\n", n); printf("\nThe shortest string is: %s\n", ss[k]);}

//解释如下
/*
因为char ss[M][N]; 这个是一个二维字符数组,调用的语句是k = fun(ss, &n); 这个ss它本质
上是一个二维数组指针,不过它是一个常指针,因此定义的函数fun()的第一个形式参数也必须是
一个指向二维数组的指针,这个指针的类型是char (*)[N],你可以这样理解,它是一个行指针,
ss[0]指向二维数组的第一行的首元素地址,ss[1]指向第二行的首元素,以此类推。因为实参ss
的指针数据类型是char (*)[N],因此形参必须得定义成char (*ss)[N],你也可以写成这样的形式
char ss[][N],这样或许会让你能够更好理解些。
*/

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-12-05
那个括号有没有都是一样的,表示char *的数组,相当于字符串数组。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网