c语言精髓,求解

2024-12-28 12:45:17
推荐回答(4个)
回答1:

int x[3],*a[5],(*b[5])[3], c[2][3]; // *a[5]:5个int型的一级指针,使用时:int x;a[0]=&x;
// (*b[5])[3]:先看括号内的,定义了5个指针,括号外是规定了这5个指针可以指向怎样的成员。可见这五
// 个指针要针向一个三个成员的数组。使用:int x[3];b[0]=&x; 此时*b[0][0]或b[0][0][0],就是x[0]了,
// c[2][3],两行三列的int型数组
int **pa,(**pb)[3],(*pc)[3],(**pp)[3]; // pa二级int型指针,使用int a;*x;x=&a;pa=&x;
// (**pb)[3],先看括号内pb是二级指针,是要指向什么样的二级指针呢,是指向三个数组的二组指针。
// 使用:int x[3],(*pc)[3];pc=&x;pb=&pc;

int (*aa[5][4])[3][8]; // (*aa[5][4])[3][8]:先看括号内的,aa是一个5行4例的一级指针,即20个一级指针,这二十个指针要指向3行8列的数组,
// int bb2[3][8]; aa[0][0]=&bb;
int bb[6][3][8]; // bb[6][3][8];定义了6个3行8列的数组。

int (*(*q)[4])[3][8]; // (*(*q)[4])[3][8]; q是一个二级指针,规定了这个二级指针要指向的是一个下标为4的的一级指针,并且这个一级指针要指向3行8列的数组

pa=a; //pa为二级指针,*a[5]是五个一级指针,这里的a实际上与&a[0],是等价的(a[0]为一级指针类型,对它取地址,得到一个二级针指),就是pa=&a[0];
pb=b; //pb为二级指针,要指向三个数组形式的一级指针,(*b[5])[3];是五个指向下标为3的数组的一级指针,这里的b与&b[0]是等价的.就是pb=&b[0];
pc=c; //pc是一个要指向下标为3的数组指针,c[2][3]; c是个2行3列的数组,我们可以看成是两个下标为3的数组级,即a[0],a[1]。pc=c;实际上就是把pc=&a[0]。
pp=b; //pc=b,就是pc=&b[0]。
pp=&pc;

aa[3][2]=bb; //前面说过(*aa[5][4])[3][8];是20个一级指针,指向的数组形式是3行8列。而bb[6][3][8];是6个3行8列的数组,bb符合aa要指向数组的形式,
// aa[3][2]=bb;就是aa[3][2]=&bb[0];
q=aa; // (*(*q)[4])[3][8]; q是一个二级指针,规定了这个二级指针要指向的是一个下标为4的的一级指针,并且这个一级指针要指向3行8列的数组
// (*aa[5][4])[3][8]; 我们可以看成是五个下标为4的数组q=aa;就是q=&aa[0];

q[3][2][1][2][3]=111; //现在q指向aa,aa的[3][2]指向数组bb上,q[3][2][1][2][3]=111;我们先看q[3][2],就是aa的[3][2],而aa的[3][2]就是bb,这样的话
// q[3][2][1][2][3]=111;就是bb[1][2][3]=111;了。

不行不行,头痛,呵呵。

回答2:

void main()
{
int *a[5],(*b[5])[3], c[2][3];

int **pa,(**pb)[3],(*pc)[3],(**pp)[3];

int (*aa[5][4])[3][8];
int bb[6][3][8];
int (*(*q)[4])[3][8];

pa=a;
pb=b;
pc=c;
pp=b;
pp=&pc;

aa[3][2]=bb;
q=aa;
q[3][2][1][2][3]=111;
}

回答3:

指针数组,这也太复杂了吧,虽然c语言精髓是指针,但这指向指针的指针的指针的...也很少见的。如果程序中用这样的,一定会让人晕头转向的,而且是非常不安全的。

回答4:

这才是2级指针,3,4,5级.......岂不是天书?