3

C99 6.5/6 格納された値にアクセスするためのオブジェクトの有効な型は、オブジェクトの宣言された型です。75)

文字型ではない型を持つ左辺値を介して、宣言された型を持たないオブジェクトに値が格納された場合、その左辺値の型は、そのアクセスおよびそれ以降のオブジェクトを変更しないアクセスに対して有効な型になります。保存された値。

memcpy または memmove を使用して型が宣言されていないオブジェクトに値がコピーされるか、文字型の配列としてコピーされる場合、そのアクセスおよび値を変更しない後続のアクセスで変更されるオブジェクトの有効な型は、値のコピー元のオブジェクトの実効型 (存在する場合)。宣言された型を持たないオブジェクトへの他のすべてのアクセスでは、オブジェクトの有効な型は、単にアクセスに使用される左辺値の型です。

75) 割り当てられたオブジェクトには宣言された型がありません。

C99 で述べられているように、静的オブジェクトの有効な型は宣言された型です。

割り当てられたオブジェクトはどのように有効な型を取得しますか?

例えば:

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

そもそも宣言型がないのはなぜですか?

4

1 に答える 1

1

割り当てられたオブジェクトには宣言された型がないため、その有効な型はアクセスに使用される左辺値の型です。この単一のステートメントでpは、有効な型ではありません:

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

それ以外の場合は、次のアクセスを持つものがあります。

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