sizeof(* v)在C中的含义是什么?

时间:2015-09-03 08:36:50

标签: c struct sizeof size-t

我有一段这样的代码:

struct mystruct *v;
size_t sz;
sz = sizeof(*v);

预计sz会是什么? 与sizeof(struct mystruct)有什么区别?
在堆栈中使用sz(而不是#define)有什么意义?

3 个答案:

答案 0 :(得分:4)

sizeof是编译时运算符,编译器将其替换为相关数字。所以在运行时会有一个数字 - 没有指针。

sizeof(*t)为您提供T的大小tT*。 所以让我们假设
char* c; sizeof(c)将给出指针的大小,而sizeof(*c)将给出字符的大小,即1个字节。

答案 1 :(得分:1)

  

预计sz是什么样的,因为v是未初始化的?

sizeof运算符不必对操作数保持的值做任何事情。对它来说重要的是类型。

此处sizeof(*v)会给出它指向的struct mystruct的大小。

答案 2 :(得分:1)

  

预计会是什么样的?

结构类型的大小(以字节为单位),包括任何填充字节。

  

sizeof(struct mystruct)有什么区别?

没有,它只是不同的编码风格。

  

将sz放入堆栈有什么意义?

据说该程序将使用该值进一步降低..?你告诉我们。