【发布时间】:2021-04-30 21:40:01
【问题描述】:
假设我有一个这样的struct:
typedef struct {
char* author;
uint32_t isbn;
} Book;
int
main( int arg_c; char* arg_v[] ) {
Book* b = malloc( sizeof *b );
char* author = "Miller";
//[...]
free(b);
return 0;
}
现在让我感到困惑的是第 8 行:Book* b = malloc( sizeof *b ); 在这里,我在等号的左侧创建了一个 Book 类型的指针 b,但同时,我取消引用右侧的b 为b 分配内存。
它是如何工作的?
当我使用该指针为其分配内存时,如何同时定义一个指针。
如果他们的行是Book* b = malloc( sizeof (Book) );,那对我来说是很直观的,因为sizeof 询问type 的大小。但是在这里,就好像标识符同时在两个地方使用,而它正在被定义。
是否发生了一些我遗漏的双重通过的事情?
【问题讨论】:
-
sizeof的操作数不会被计算,所以sizeof(*p)不会取消引用p。它只查看表达式*p的type。一定有一个重复的地方,但我没有立即看到一个好的。否则你是对的,取消引用未初始化的指针会有问题。 -
通常不禁止使用您在其自己的初始化程序中定义的标识符。
int x = x;在语法和语义上是合法的,尽管(我相信)如果执行它会导致未定义的行为。
标签: c pointers initialization declaration sizeof