首页 > 代码库 > 数组、字符串在指针和函数中的一些经验总结

数组、字符串在指针和函数中的一些经验总结

这篇主要是记录一下今天下午的坑和教训。

1.对于多维数组,在函数原型声明的形式是 void funct(int arr[ ][10]) 或 void funct (int (*arrp)[10]),后面的数字10必须要指定。不能以 void funct( int arr[ ] [ ]) 或 void funct (int **arr)等其他形式来声明带多维数组参数的函数原型。

而数组在首次声明时必须要指定维数,如 int arr[2]; 不能是 int arr[ ]。除非是后面带初始化的数,如 int arr[ ]={1,2,3}; 多维数组的初始化必须是 int darr[2][3]={ {1,2,3},{4,5,6}};

2.对于字符串,其初始化是以数组形式或者指针形式,如 char *c="good"; 或者 char c[ ] = "good"; 或者 char c[5]="good"; 多维字符串同样可以用数组或指针形式初始化和声明。如 声明 char **carr; 或 char * carr[2]; 或 char carr[2][3]; 若后面带初始化的数,也可以 char *carr[2]={"as","ad"};

以数组形式声明和初始化的多维字符串,它在函数原型里的形式是 void funct(char arr[ ][10]) 或 void funct(char (*arrp)[10]),与上面的多维数组相同。

以指针形式声明和初始化的多维字符串,它在函数原型里的形式是 void funct(char **arr) 或 void funct(char *arr[ ]),这里面是因为arr[ ]相当于*arr。

 

总的来说,以数组形式声明和初始化的多维变量,在函数中它的类型是 int * [10]。而以指针形式声明和初始化的字符串,在函数中它的类型是int **。

数组、字符串在指针和函数中的一些经验总结