[quote=引用 3 楼 zilaishuichina 的回复:] 你的p[0] 申明的时候是什么类型, sizeof就按什么类型计算字节数, 而不是按你的p在实际运行的时候,指向的数据的类型去计算字节数, 因为sizeof是一个宏,宏是在编译前完成代码替换的, 也就是编译前, 编译器就已经计算好sizeof的值了,然后将你代码中的sizeof 的地方,替换成一个常量值,然后开始编译,所以这个时候, 编译器不可能能预测的出来,你的这个p在实际运行的时候,到底会指向什么,它只能按你申明p这个变量的时候,你申明的类型去计算
你的p[0] 申明的时候是什么类型, sizeof就按什么类型计算字节数, 而不是按你的p在实际运行的时候,指向的数据的类型去计算字节数, 因为sizeof是一个宏,宏是在编译前完成代码替换的, 也就是编译前, 编译器就已经计算好sizeof的值了,然后将你代码中的sizeof 的地方,替换成一个常量值,然后开始编译,所以这个时候, 编译器不可能能预测的出来,你的这个p在实际运行的时候,到底会指向什么,它只能按你申明p这个变量的时候,你申明的类型去计算
(int *) 相当于把malloc的返回值转换成了int*,但由于你的p是void*,接下来又隐式转换为void*,所以你转换成int*相当于没意义,如果要int*,你要把p也定义为int*的变量
33,311
社区成员
41,784
社区内容
加载中
试试用AI创作助手写篇文章吧