分配对象的严格别名规则

时间:2012-12-05 13:00:38

标签: c types c99

  

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

     

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

     

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

     

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

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

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

例如:

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

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

1 个答案:

答案 0 :(得分:1)

分配的对象没有任何声明的类型,因此其有效类型是用于访问的左值的类型。使用此单个语句,p没有有效类型:

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

否则,它将具有下一次访问权限:

/* Effective type of p: unsigned int */
*(unsigned int *)p = 20U;