1 c
我还有另一个新手C问题:为什么结构的第一个成员在未初始化时返回的地址与结构自己的指针地址不相似?
例:
struct Metadata {
int message_ID;
//other members...
//...
};
struct Metadata* baseMetadataPtr = (struct Metadata*) malloc(sizeof(struct Metadata)*100);
printf("baseMetadataPtr: %d\n", baseMetadataPtr);
//consoll says "baseMetadataPtr: 2636496"
printf("baseMetadataPtr->message_ID: %d\n", baseMetadataPtr->message_ID);
//consoll says "baseMetadataPtr->message_ID: 2621636"
Run Code Online (Sandbox Code Playgroud)
你的第二次printf电话是错的.它应该是:
printf("baseMetadataPtr->message_ID: %p\n", &baseMetadataPtr->message_ID);
// need to use %p for pointer ^ ^ need unary-& operator
Run Code Online (Sandbox Code Playgroud)
正如现在所写,message_ID正在打印整数值.你需要拿地址baseMetadataPtr->message_ID.另请注意,如果要打印指针,则应使用%p格式说明符,而不是%d(打印整数).
struct-type对象的第一个数据成员的地址始终与struct-type对象本身的地址相同.这是有保证的,因为在结构的开头不允许填充(尽管在数据元素之间或结构的末尾允许填充).