多维数组当函数参数,最后几个长度要指定,如:
printArray(int [][2][3],length);
一个技巧是把多维数组当一维数组传。
如:
int a[][2]={1,2,3,4}
传给
printArray (int [],int)
把字符串当作指针
如程序:
#include <stdio.h>
void main(void)
{
char *workdays[] = {"Monday","Tuesday","Wednesday","Thursday","Friday",NULL};
char ** string;
string = workdays;
while(*string)
printf("%s",*string++);
}
char title[] = "C" 与 char* title="c" 和 char tittle[] = {'C'} 长度不同,多个一个'/0'.
-------------------------------------------------------------------------------------
数组和指针大多数情况下是等同的,所以在传参数时,假如要传一个数组,数组里面是指针变量,就相当于传指向指针的指针。
如:
int * array[10]
printArray(int** array) or printArray(int* array[])
-------------------------------------------------------------------------------------
void main(void)
{
int a[] = {0,1};
*a = 3;
//OK
//a = NULL; 数组a实际上是常量,禁止赋值
printf("%x/n", a);
abcd(a);
printf("%x/n", a); //value of a never changed.
}
int abcd(int *a)
{
a = NULL; //OK,因为传指针时,同样是值拷贝,a是变量。
return 0;
}
---------------------------------------------------------------------------------------
结构数组的初始化,是否有括号有很大影响。
typedef struct _IconData{
unsigned int iconID;
unsigned int size;
unsigned char *rgb;
}IconData;
IconData a[2] = {1, 1}; //初始化第一个结构的iconID和size
IconData a[2] = {{1}, {1}}; //初始化两个结构的iconID
二维数组也类似
IconData a[][2] = {{1}, {1}}; //初始Icon[0][0] 和 Icon[1][0]的iconID 数组的大小是 2*2
IconData a[][2] = {{{1}, {1}}}; //初始Icon[0][0] 和 Icon[0][1]的iconID 数组的大小是 1*2
因篇幅问题不能全部显示,请点此查看更多更全内容