【问题标题】:Interesting problem on pointers..Please help关于指针的有趣问题..请帮助
【发布时间】:2011-04-08 18:27:37
【问题描述】:
#include<iostream>
#include<conio.h>

using namespace std;
int main()
{
           int x = 65;
           int *ptr = &x;
           char * a= (char *)ptr;
           cout<<(int)*(a);
           getch();return 0;
}           

Sixeof(ptr) 和 Sizeof(a) 显示 4
sizeof(int) 显示 4,sizeof(char) 显示 1
所以 65 存储在 4 个字节中,即
00000000 00000000 00000000 01000001 并且第一个字节的地址存储在ptr中

在上面的代码中,我将 int* 类型转换为 char* 以打印存储在 x(type int) 第一个字节中的值。

所以在类型转换后“a”存储第一个字节地址,即包含在 ptr 中 现在在显示 (int)*a 时,它应该只考虑第一个字节来显示值..?? 但输出是 65 而不是 0(第一个字节值)..我哪里出错了..?

我学到的是

char * ptr1;
ptr1++;  //Ptr1 goes to the next byte..*ptr1 will display only 1 byte value

int  * ptr2;
ptr1++;  //Ptr2 goes to the next 4 byte..*ptr2 will display value conmtain in 4 bytes

PS - 我正在开发 Dev-C++

【问题讨论】:

  • sizeof(char) 根据定义始终为 1

标签: c++ void-pointers


【解决方案1】:

你的机器是little-endian,最低有效字节在前。

【讨论】:

  • ... 在提问者犯相反的错误之前:little-endian 仅影响将值存储在内存中然后单独访问其字节时发生的情况。它不会影响 &gt;&gt;&lt;&lt; 移位运算符的含义:无论字节序如何,较低的有效位总是在“右边”。
  • “ptr”和“a”中存储的地址是一样的,是不是就是LSB的地址存储在其中..?
猜你喜欢
  • 1970-01-01
  • 2014-05-13
  • 2011-12-09
  • 2015-09-27
  • 2023-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-25
相关资源
最近更新 更多