#include <stdio.h>
int main () {
char c = 'A';
int *int_ptr;
double *double_ptr;
*int_ptr = *(int *)&c;
*double_ptr = *(double *)&c;
printf("Original char = %c \n", c);
printf("Integer pointer = %d \n", *int_ptr);
printf("Double pointer = %f\n", *double_ptr);
return 0;
}
任务是 - 为什么我不能使用此代码分配double_ptr
,因为它会导致分段错误,但对整数有效?
据我所知,char长度为1个字节,int长度为4个字节,因此double为8个字节长。
通过使用表达式*(double *)&c
,我希望如下:
答案 0 :(得分:3)
您的代码具有未定义的行为。因此,任何事情都可能发生。
UB是因为你正在转换 chrome.tabs.query({'active': true, 'windowId': chrome.windows.WINDOW_ID_CURRENT},
function(tabs){
alert(tabs[0].url);
}
);
,这是4字节和8字节类型的一个字节,这意味着你(可能)访问内存越界或错误对齐。
是否有任何此类工作&#34;工作&#34;或&#34;不工作&#34;在任何特定的系统上都不是很相关,因为代码是错误的。
答案 1 :(得分:1)
在你的程序中,类型转换为char
到int*
或double*
,然后取消引用会从内存中获得一些额外的字节,这是未定义的行为