我有以下代码:
#include <stdio.h>
#include <inttypes.h>
#define PORT_TYPE 0x01000000
main(){
uint32_t port_id = 0x00123456;
uint32_t *iptr = NULL;
iptr = (uint32_t *) (sizeof(uint32_t));
*iptr = (PORT_TYPE | port_id);
}
这让我感到很不对劲。我的意图是要么都将其变量化以获取32位值(0x01123456)
最佳答案
您正在取消引用指针iptr
,其值不是有效的可写内存位置。触发未定义的行为,在您的情况下为分段错误。
仅计算值,您可以执行例如
printf("0x%08x\n", PORT_TYPE | port_id);
要计算
PORT_TYPE
和port_id
的按位或的指针,可以执行以下操作:uint32_t *iptr = (uint32_t *) (PORT_TYPE | port_id);
强制转换是必需的,因为按位或:ed的值不是指针(不能按位或指针)。
请注意,以上内容从未取消对结果指针的引用,因为无法保证(通常,很不可能)这样做是有效的。