3

C99 6.5/6 访问其存储值的对象的有效类型是对象的声明类型(如果有)。75)

如果通过具有非字符类型类型的左值将值存储到没有声明类型的对象中,则左值的类型将成为该访问的对象的有效类型以及不修改该类型的后续访问储值。

如果使用 memcpy 或 memmove 将值复制到没有声明类型的对象中,或者复制为字符类型的数组,则对于该访问和不修改该值的后续访问,修改对象的有效类型是从中复制值的对象的有效类型(如果有的话)。对于没有声明类型的对象的所有其他访问,对象的有效类型只是用于访问的左值的类型。

75) 分配的对象没有声明的类型。

正如 C99 中所述,静态对象的有效类型是它们声明的类型。

分配的对象如何获得它们的有效类型?

例如:

int *p = malloc(100 * sizeof(int));

为什么他们一开始就没有声明的类型?

4

1 回答 1

1

An allocated object hasn't got any declared type, so its effective type is the type of the lvalue used for the access. With this single statement, p hasn't effective type:

#include <stdlib.h>
int *p = malloc(100 * sizeof(int));

Otherwise, it will have one with the next access:

/* Effective type of p: unsigned int */
*(unsigned int *)p = 20U;
于 2012-12-05T13:23:55.180 回答