3 回答
TA贡献1895条经验 获得超7个赞
typedef会是
typedef char type24[3];
但是,这可能是一个非常糟糕的主意,因为结果类型是一种数组类型,但它的用户不会看到它是一个数组类型。如果用作函数参数,它将通过引用传递,而不是通过值传递,并且sizeoffor它将是错误的。
一个更好的解决方案是
typedef struct type24 { char x[3]; } type24;
您可能也希望使用unsigned char而不是char,因为后者具有实现定义的签名。
TA贡献1801条经验 获得超16个赞
来自R ..的回答:
但是,这可能是一个非常糟糕的主意,因为结果类型是一种数组类型,但它的用户不会看到它是一个数组类型。如果用作函数参数,它将通过引用传递,而不是通过值传递,并且它的sizeof将是错误的。
没有看到它是一个数组的用户很可能会写这样的东西(失败):
#include <stdio.h>
typedef int twoInts[2];
void print(twoInts *twoIntsPtr);
void intermediate (twoInts twoIntsAppearsByValue);
int main () {
twoInts a;
a[0] = 0;
a[1] = 1;
print(&a);
intermediate(a);
return 0;
}
void intermediate(twoInts b) {
print(&b);
}
void print(twoInts *c){
printf("%d\n%d\n", (*c)[0], (*c)[1]);
}
它将使用以下警告进行编译:
In function ‘intermediate’:
warning: passing argument 1 of ‘print’ from incompatible pointer type [enabled by default]
print(&b);
^
note: expected ‘int (*)[2]’ but argument is of type ‘int **’
void print(twoInts *twoIntsPtr);
^
并产生以下输出:
0
1
-453308976
32767
- 3 回答
- 0 关注
- 628 浏览
添加回答
举报