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次