结构和指针的类型是什么?

时间:2014-04-15 13:37:31

标签: c

假设我有以下代码:

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。

2 个答案:

答案 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必须是另一个结构,否则代码就不会编译。