在C中转换指针类型

时间:2017-01-30 05:31:07

标签: c pointers

#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,我希望如下:

  1. &安培; - 获取c。
  2. 的内存地址
  3. (double *) - 假装这是一个指向double的指针。
  4. *() - 获取实际值并将其分配给double var。

2 个答案:

答案 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)

在你的程序中,类型转换为charint*double*,然后取消引用会从内存中获得一些额外的字节,这是未定义的行为