理解:从int地址转换为char数组

jko*_*jko 2 c++

这条线具体是做什么的?

(char*) (&input)

我知道它将 int(input) 转换为 char 数组..还是我错了?你能指导我它是如何计算的吗?

更新:我想我现在明白了一点,然后我根据你的评论创建了 C++ 代码

#include <cstdlib>
#include <iostream>

using namespace std;
int main(){
 int input = 123456;
 int *p = &input;

 char *cp = (char*)p; 

for(int counter = 0;counter <sizeof(input); counter++){        
        cout << *(cp+counter) << endl;
        }


 system("pause");
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

但我认为我的代码是错误的。因为它只显示“@”,大“r”?,以及诸如十字符号之类的东西......

Bri*_*ach 5

它不会“转换”任何东西。您只需指向整数的第一个字节。

如果你的int是 32 位(4 字节),并且你有一个指向它的指针......

int myInt = 123456;
int *ptr = &myInt;
Run Code Online (Sandbox Code Playgroud)

然后你将该指针转换为char指针......

char *cPtr = (char*)ptr;
Run Code Online (Sandbox Code Playgroud)

现在,您有一个指向整数的第一个字节的 char 指针。您可以通过以下方式单独查看每个字节:

int i;
for (i = 0; i < sizeof(int); i++)
{
    printf("%d\n", *(cPtr+i)); 
}
Run Code Online (Sandbox Code Playgroud)

请注意,它char是带符号的,因此某些字节可能会换行为负数。相反,使用它unsigned char会改变这种行为。如果指针算术让您感到困惑,您可以替换*(cPtr+i)cPtr[i]并获得相同的输出。