帕斯卡:
type
TA = packed record
b: Char;
c: LongInt;
end;
TAA = array[1..255] of TA;
var
D: LongInt;
Z: LongInt;
N: array[0..10] of packed record
F: LongInt;
Y: LongInt;
WL, WW: Word;
E: ^TAA;
end;
var
b_var:char;
i,j:longint;
...
b_var := N[i].E^[j].b;
C语言:
typedef struct
{
char b;
signed long int c;
} TA;
typedef TA TAA[256];
signed long int D;
signed long int Z;
struct
{
signed long int F;
signed long int Y;
unsigned int WL, WW;
TAA *E;
} N[11];
...
// b_var = N[i].*E[j].b; /*is not allowed by compiler*/
// b_var = N[i].(*E)[j].b; /*is not allowed by compiler*/
// b_var = N[i].E[j]->b; /*allowed by compiler, but no one knows is it same as Pascal */
此代码不起作用。作品b_var = N [i] .E [j] - > b; ,但它和Pascal的代码一样吗? E [j]被解释为数组的元素还是指针的元素?
答案 0 :(得分:0)
在C中,数组和指针实际上是相同的。因此,E[j]
是*(E + sizeof(TOutArr)*j)
的语法糖,你需要理解这一点。使用指向结构的指针时,var->b
是(*var).b
的语法糖。
在这一行:
N[i].E[j]->b
N[i]
访问索引i(这是一个结构)
E[j]
在索引j处访问数组E的元素(这是指向结构的指针)
->b
通过指向struct
您没有初始化E
,它被定义为指针。并且变量必须始终在C中初始化才能使用它们(特别是指针,因为尝试通过未初始化的指针访问值将导致内存访问错误或内存损坏)。
答案 1 :(得分:0)
是否正确理解了数组https://img-fotki.yandex.ru/get/53/240791000.0/0_17daa3_f02a9eaf_orig.png上的指针?如果正确则b_var = N [i]。* E [j] .b;和b_var = N [i] .E [j] - > b;不一样 。那么我该怎么做才能保持Pascal逻辑呢? -
[]具有更高的优先级,然后取消引用。我想我必须使用b_var = N [i]。(* E)[j] .b;。但在这种情况下,我收到错误语法错误:'(' -
或许我应该使用b_var = N [i] .E [0] [j] .b; ?