【发布时间】:2020-05-08 20:42:08
【问题描述】:
拥有此代码:
#include <stdio.h>
#include <stdlib.h>
struct Test { char c; } foo;
int main (void) {
struct Test *ar[10];
struct Test *(*p)[] = &ar; //what type of syntax is this *(*p)[]
*(*p+1) = &foo; // the same (*p)[1] = &foo
//this only works
p[0][1] = &foo //the same as *(*p+1)
////1error: invalid use of array with unspecified bounds
(*(*p+1)+1) = &foo // the same as p[1][1] = &foo
////2error: lvalue required as left operand of assignment
//HOW TO make assignment of p[1][1] = &foo and NOT p[0][1] ??
return 0;
}
尝试将地址从结构分配到结构数组时,我遇到了 2 个奇怪的错误。我想要错误解释以及如何将分配(即代码)分配给p[1][1]。
编辑:the same as 语句可能是错误的。我只是想,如果“正常”指针(它们的类型),它们将是平等的
【问题讨论】:
-
哎哟!指向指针数组的指针——大小不确定。这将很难解释。可以做到,但并不容易。我不相信您的“与” cmets 一样,尤其是第一个。
-
@JonathanLeffler 是的,第一个完全错误,不是吗?
(*p)[0]与*(*p)相同。那里没有+1。 -
@JonathanLeffler 他们可能是错的,如果是这样,就这么说
-
但是我的意思是,为什么他们错了,如果“普通指针”或者他们都是正确的?
-
我主要是在说“我的脑痛”和 TGIF。对你来说好消息是你不太可能在野外遇到任何如此深奥的东西——人们通常不会编写这样的代码,尤其是因为它很难理解和正确。我将坐在场边,直到几个小时后。我希望有人能帮我找出问题所在。