char *str1[] = {"hello","world"};
char *str2[] = {"nihao","shijie"};
char **ch[]={str1,str2}; //str1等同于ch[0],str2等同于ch[1]
printf("%s\n",ch[0][0]);
printf("%s\n",ch[0][1]);
printf("%s\n",ch[1][0]);
printf("%s\n",ch[1][1]);
printf("**************************\n");
char ***str = ch; //str与ch等同
printf("%s\n",str[0][0]);
printf("%s\n",str[0][1]);
printf("%s\n",str[1][0]);
printf("%s\n",str[1][1]);
char***str 可以指向一个char**ch变量,也可以指向一个char**ch[]数组(本质上是指向数组的首元素(也是一个char**变量),数组的本质是内存上连续的多个变量集合)
char**ch[2]是存储了2个 char** str1和char** str2 变量的数组, str[0]就是ch[0]; str[1]就是ch[1];
char **str1是二重指针,指向一个char * str1[2] 数组;
str1[0]是指向"hello"的指针;str1[1]指向"world"的指针
所以:char *mm = str[0][0] ; ------->"hello"
char *nn = str[0][1];---------------->"world"
char* p1= "hello";
int i_value = 1;
char* p2= (char*)&i_value;
double d_value = 1.1;
char* p3= (char*)&d_value;
char* q1= "world";
int i_Value = 2;
char* q2= (char*)&i_Value;
double d_Value = 2.2;
char* q3= (char*)&d_Value;
char* str1[] = {p1,p2,p3};
char* str2[] = {q1,q2,q3};
char** str[]={str1,str2};
char*** boss = str;
printf("%s\n",boss[0][0]);
printf("%d\n",*((int*)boss[0][1]));
printf("%.2lf\n",*((double*)boss[0][2]));
printf("%s\n",boss[1][0]);
printf("%d\n",*((int*)boss[1][1]));
printf("%.2lf\n",*((double*)boss[1][2]));
在实际应用中,我们通常会用char* 来指向int 和double等其他类型的数据,这样使用起来更方便。
这种例子还有:
struct str{
int aa;
double bb;
char cc;
};
struct str dd={11,2.2,'x'};
char ch[10];
memcpy(ch,(char*)&dd,sizeof(struct str));