char *((*aa)[3][5]);
char *(*aaa[3][5]);
printf("%d, %d, %d, %d, %d\r\n", sizeof(aa), sizeof(*aa), sizeof(**aa), sizeof(***aa), sizeof(****aa));
printf("%d, %d, %d, %d, %d\r\n", sizeof(aaa), sizeof(*aaa), sizeof(**aaa), sizeof(***aaa), sizeof(****aaa));
/*
char *((*)[3][5])4
char *([3][5])4*3*5
char *([5]) 4*5
char * 4
char 1
---------------------------
char *(*[3][5])4*3*5
char *(*[5]) 4*5
char *(*) 4
char * 4
char 1
char *(*aaa[3][5]);
printf("%d, %d, %d, %d, %d\r\n", sizeof(aa), sizeof(*aa), sizeof(**aa), sizeof(***aa), sizeof(****aa));
printf("%d, %d, %d, %d, %d\r\n", sizeof(aaa), sizeof(*aaa), sizeof(**aaa), sizeof(***aaa), sizeof(****aaa));
/*
char *((*)[3][5])4
char *([3][5])4*3*5
char *([5]) 4*5
char * 4
char 1
---------------------------
char *(*[3][5])4*3*5
char *(*[5]) 4*5
char *(*) 4
char * 4
char 1
*/
void fun(int num, char *p[], int size) {
int i;
for(i=0; i<num; i++)
printf("ip %x \r\n", p[i*size]);
}
int main(int argc, char* argv[])
{
char ip[5][16];
strcpy(ip[0], "172.16.1.1");
strcpy(ip[1], "192.168.1.1");
fun(2, (char **)(ip), 16);
}
程序会崩溃。fun传ip为首地址,即ip[0][0]地址
ip[0[0]-ip[0][3]值 0x31 0x37 0x32 0x2e,把这当作一个地址
而p为指针的指针,p[0]的值为地址,因此为0x2e323731,而不是ip[0][0]地址