C++ 结构数组的typedef,其中一个char数组作为结构的成员
我通常在oracle pro*c/c++中通过C++ 结构数组的typedef,其中一个char数组作为结构的成员,c++,c,struct,typedef,oracle-pro-c,C++,C,Struct,Typedef,Oracle Pro C,我通常在oracle pro*c/c++中通过 VARCHAR myvar[25]; 预编译后,我的文件更改为如下所示 typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR; struct { unsigned short len; unsigned char arr[25]; } myvar; 因为当我们使用varchar myvar[25]语句时,typedef是为varchar提供的 为什么它不创建结构
VARCHAR myvar[25];
预编译后,我的文件更改为如下所示
typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR;
struct { unsigned short len; unsigned char arr[25]; } myvar;
因为当我们使用varchar myvar[25]
语句时,typedef是为varchar
提供的
myvar[25]
arr[1]
更改为第二行中的arr[25]
根据您展示的预编译代码,我可以这么说
VARCHAR myvar[25];
是这样解释的
myvar varchar(25)
这也是生成的内容,请注意char arr[25]
struct { unsigned short len; unsigned char arr[25]; } myvar;
myvar
是一个对象,它为数组中的字符myvar.arr[25]
和字符串长度myvar.len
保留内存。它还需要什么void PrintVarChar(VARCHAR * vcPtr) {
for(unsigned short i; i < vcPtr->len; ++i) {
PrintChar(vcPtr->arr[i]);
}
}
1)
myvar
:名称重复。@BLUEPIXY抱歉。如果它真的想像你上面说的那样解释,我就抓不住你了。。这个语句需要什么typedef struct{unsigned short len;unsigned char arr[1];}VARCHAR代码>。请澄清。我想知道在c语言中有没有这样的概念。如果是预编译器的工作,那么就没有我不知道的问题,VARCHAR
typedef是用来做什么的。在C语言中,当您分配动态内存时,可以使用这种最小的typedef。您可以说p=malloc(sizeof(VARCHAR)+14)
,这将在堆上提供大小为14的VARCHAR。但由于我既没有编写预编译器,也没有访问预编译器的文档,所以我不能肯定。。。但这似乎是未定义的行为。。oracle precompiler将如何使用未定义的行为?好吧,我没有说这是一个好的可移植实践:)oracle为什么要使用它?只有他们知道。
PrintVarChar((VARCHAR*)&myvar);