C++ 指针问题

C++ 指针问题,c++,c,pointers,C++,C,Pointers,你能给我解释一下这里发生了什么事吗 char data[128]; // Create char array of size 128. long * ptr; // Create a pointer. ptr = (long *) data; // ?? 主要来说,(长*)是什么意思 这是否意味着数据是char类型的,而我将对数据的引用转换为对long的引用 谢谢。(long*)是一种类型转换。由于数据是字符的数组,因此需要使用此类型转换来分配到ptr,这是一个长*指针。您的“Do

你能给我解释一下这里发生了什么事吗

char data[128]; // Create char array of size 128.
long * ptr;     // Create a pointer.
ptr = (long *) data;   // ??
主要来说,(长*)是什么意思

这是否意味着数据是char类型的,而我将对数据的引用转换为对long的引用


谢谢。

(long*)
是一种类型转换。由于
数据
字符
的数组,因此需要使用此类型转换来分配到
ptr
,这是一个
长*
指针。您的“Do it means”语句是正确的。

此语句的意思是,获取数据(128个字符开头的内存地址),并将该内存地址视为长数字的开头

这似乎是非常危险和愚蠢的

这样做有什么特别的原因吗?

(long*)
是演员阵容。它告诉编译器“这是
char[128]
你得到的?把它当作
long*
”但是你把它分配给
char*
指针,这是一个无效的赋值,没有从
long*
转换到
char*
,并且b)不会保留。。。经度。。。变量的类型


基本上,在这个特殊的例子中它是没有意义的。我怀疑这是因为您修改了此处显示的原始代码--您能告诉我们它实际上是什么样子吗?

这个
(long*)
表达式是C风格的强制转换。它处理由
数据
指向的内存,并将其视为指向
long

类型的数据的指针,这是一个“C样式”转换;在你的例子中,它被翻译成“重新解释演员阵容”。将其理解为“将指针指向
char
类型,并将其视为指向
long
”。编写它的首选方法是重新解释(ptr)。请注意,有效索引的范围为0到128*sizeof(char)/sizeof(long)-1,这可能因平台而异。

它将数据指针转换为指向long的指针

该行:

 char data[128];
将分配128字节的内存,并将该数据视为字符。守则:

 long * ptr;
 ptr = (long *) data;
分配一个指向long的指针,并将该指针设置为指向由
char data[128]分配的内存


您可以通过
data[x]
引用该内存,以获取从该内存块开始的第x个字符。或者,您可以通过
ptr[x]
引用此内存,以获得此内存块开头的第x个长起始值。请注意,每个long比每个字符占用更多的存储空间。它可能是8个字节-因此您可以转到
data[127]
ptr[15]

标记为已被应答100次