c - 以下哪项是下面给出的程序的正确输出?

标签 c pointers

如果机器是 32 位小尾数且 sizeof(int) 是 4 字节。

给定以下程序:

 line1:  #include<stdio.h>
 line2:  {
 line3:      int arr[3]={2,3,4};
 line4:      char *p;
 line5:      p=(char*)arr;
 line6:      printf("%d",*p);
 line7:      p=p+1;
 line8:      printf("%d\n",*p);
 line9:      return 0;
         }

预期输出是什么?

A:2 3

B:2 0

C:1 0

D:垃圾值

有一件事情让我困扰,即将整数指针转换为字符指针。

  1. 选角有多重要?

  2. 编译器在第 5 行做什么? (p = (char *) arr;)

  3. 第 7 行发生了什么? (p = p + 1)

  4. 如果输出是20,那么如何打印出0

最佳答案

(E) 以上都不是

但是,假设 (a) 您使用的是小端机器(例如 x86),并且 (b) sizeof(int) >= 2,则应打印“20”(不两者之间打印空格)。

a) 强制转换对于一次读取一个字节的数组是“必要的”,而不是读取一系列 ints

b) 这只是将第一个 int 的地址强制转换为指向 char 的指针

c) 将 p 中存储的地址增加 sizeof(char)(即 1)

d) 第 8 行打印 int 机器表示的第二个字节

关于c - 以下哪项是下面给出的程序的正确输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11653121/

相关文章:

C位数组设置值

c - 结构指针的内存分配

c++ - 指针增量 - 奇怪

c - 段错误 - 处理堆栈数据结构

c - GNU C 库中的 opendir( ) sigsegv

c++ - 如何从远程线程 DestroyWindow?

c++ - 内存在单行函数调用中损坏?

更改字符串中某些单词的顺序

c - ESP8266_NONOS_SDK FOTA配置

c - 一个数字的 printf 输出错误