我想声明指针ptr0
,它指向具有指针元素的array1 of pointers to arrays of pointers
,而array1 of pointers to arrays of pointers
指向另一个由整数元素组成的arrays of pointers to arrays of integers
。
注意:每个数组由三个元素组成。
以下是我方法:
//C99
#include <stdio.h>
#include <stdlib.h>
int main()
{
/* Level 3 */
int arrays_int_3_1_1[3] = {0,1,2};
int arrays_int_3_1_2[3] = {3,4,5};
int arrays_int_3_1_3[3] = {6,7,8};
int arrays_int_3_2_1[3] = {9,10,11};
int arrays_int_3_2_2[3] = {12,13,14};
int arrays_int_3_2_3[3] = {15,16,17};
int arrays_int_3_3_1[3] = {18,19,20};
int arrays_int_3_3_2[3] = {21,22,23};
int arrays_int_3_3_3[3] = {24,25,26};
/* Level 2 */
void *arrays_2_1[3] = {(void*)arrays_int_3_1_1,(void*)arrays_int_3_1_2,(void*)arrays_int_3_1_3};
void *arrays_2_2[3] = {(void*)arrays_int_3_2_1,(void*)arrays_int_3_2_2,(void*)arrays_int_3_2_3};
void *arrays_2_3[3] = {(void*)arrays_int_3_3_1,(void*)arrays_int_3_3_2,(void*)arrays_int_3_3_3};
/* Level 1*/
void **array1[3] = {arrays_2_1,arrays_2_2,arrays_2_3};
/* Level 0*/
void ***ptr0 = array1;
/*-----------------------------*/
for (int i = 0 ; i <27 ; i++)
{
// Question here..
printf("%d \n", <??? How to do the dereference to access each element ???>);
}
}
问题是〉〉如何解引用以访问每个元素
2条答案
按热度按时间okxuctiv1#
ptr0
指向array1
的第一个元素(array1[0]
),因此ptr0
可以用作array1
的别名。array1
的每个元素都指向其中一个arrays_2_*
的第一个元素,因此可以用作这些元素的别名。每个
arrays_2_*
的每个元素都是指向其中一个arrays_3_*
(强制转换为void *
类型)的第一个元素的指针。强制转换回int *
类型将生成对应arrays_int_3_*
的别名。执行解引用的方法不止一种,但您可能会沿着以下路线寻找一些方法:
如何将一个整数
i
(范围为0 ... 26)转换为三个整数l
、m
、n
(范围均为0 ... 2),这是一个练习题。hujrc8aj2#
不知道你为什么要把它们转换成
void*
,但是我把它们转换回来打印。