假设我有以下代码:
struct client {
char buf[MAXLINE];
int curp;
};
struct client *c;
我想知道以下每个变量的类型是什么以及为什么?
x1 = c->buf;
x2 = *c->buf;
x3 = &c->buf[c->curp];
x4 = *c;
我知道c是指向struct client的指针。因此解除引用后的x4应该是struct client。
答案 0 :(得分:0)
可能的类型为
x1 = c-> buf;
x1是指向字符的指针,因为buf是基指针。
x2 = * c-> buf;
x2是一个字符,因为取消引用基指针以获取第一个字符
x3 =& c-> buf [c-> curp];
x3是指向字符的指针,因为c-> buf [c-> curp]给出一个字符,而&
给出了它的地址
x4 = * c;
x4是struct client的变量,因为c是指向该结构的变量的指针并被解除引用。
没有必要,因为其他类型也可用于保存这些值。这些都是可能的类型。
答案 1 :(得分:0)
假设代码实际编译了......那么:
x1 = c-> buf;
x1可以是任何东西,因为表达式的rvalue不会影响或确定x1的类型。
c-> buf是一个数组,它又衰减成指针。指针可以转换为任何其他指针类型。它可以转换为int。
x2 = * c-> buf;
x2可以是任何东西,因为表达式的rvalue不会影响或确定x2的类型。
* c-> buf是char
,但该类型可以转换为任何其他整数类型,也可以转换为指针类型或浮点等等。
x3 =& c-> buf [c-> curp];
x3可以是任何东西,因为表达式的rvalue不会影响或确定x3的类型。
出于与x1相同的原因,除了这种情况下的rvalue是一个char指针。
x4 = * c;
x4可以是任何东西,因为表达式的rvalue不会影响或确定x4的类型。
但是,* c是一个结构,所以x4必须是另一个结构,否则代码就不会编译。