C99 6.5 / 6访问其存储对象的有效类型 value是对象的声明类型(如果有)。 75)
如果通过一个值存储到没有声明类型的对象中 lvalue的类型不是字符类型,然后是类型 左值成为该访问对象的有效类型 以及不修改存储值的后续访问。
如果将值复制到没有声明类型的对象中 memcpy或memmove,或者被复制为字符类型数组 该访问和修改对象的有效类型 不修改值的后续访问是有效类型 复制值的对象,如果有的话。对全部 对没有声明类型的对象的其他访问,有效 对象的类型只是用于的左值的类型 访问。
75)分配的对象没有声明的类型。
如C99所述,静态对象的有效类型是它们声明的类型。
分配的对象如何获得有效类型?
例如:
int *p = malloc(100 * sizeof(int));
为什么他们没有一个声明的类型开始?
答案 0 :(得分:1)
分配的对象没有任何声明的类型,因此其有效类型是用于访问的左值的类型。使用此单个语句,p
没有有效类型:
#include <stdlib.h>
int *p = malloc(100 * sizeof(int));
否则,它将具有下一次访问权限:
/* Effective type of p: unsigned int */
*(unsigned int *)p = 20U;