你能告诉我这里发生了什么吗?
char data[128]; // Create char array of size 128.
long * ptr; // Create a pointer.
ptr = (long *) data; // ??
主要是,(长*)是什么意思?
这是否意味着数据的类型为char,并且我将对数据的引用转换为对long的引用?
谢谢。
答案 0 :(得分:3)
(long*)
表达式是C样式转换。它处理data
指向的内存并将其视为指向long
类型数据的指针
答案 1 :(得分:1)
这是一个“C风格”演员;在你的情况下,它转化为“重新解释演员”。将其读作“指向char
类型的指针,并将其视为指向long
”。写它的首选方法是reinterpret_cast<long>(ptr)
。请注意,有效索引从0到128 * sizeof(char) / sizeof(long) - 1
,这可能因平台而异。
答案 2 :(得分:0)
(long *)
是一个类型转换。由于data
是char
的数组,因此需要此类型转换才能将ptr
赋值为long *
指针。你的“意思是”句子是正确的。
答案 3 :(得分:0)
此语句表示取数据(128个字符的开头的内存地址),并将该内存地址视为长数字的开头。
这似乎非常危险和愚蠢。
这有什么特别的原因吗?
答案 4 :(得分:0)
(long *)
是演员。它告诉编译器“你在这里char[128]
得到了什么?将它视为long *
。”但是你将它分配给一个char *
指针,其中a)是一个无效的赋值,没有从long *
到char *
的强制转换,而b)不会保留...经度。 ......变量。
基本上,在这个特定的例子中,这是毫无意义的。我怀疑是因为你已经修改了原始代码以供显示 - 你能告诉我们它实际上是什么样的吗?
答案 5 :(得分:0)
它将数据指针转换为指向long的指针。
该行:
char data[128];
将分配128个字节的内存并将该数据视为字符。代码:
long * ptr;
ptr = (long *) data;
分配一个指向long的指针,并将该指针设置为指向由char data[128];
分配的内存。
您可以通过data[x]
引用此内存,以获取从此内存块开头开始的第x个字符。或者您可以通过ptr[x]
引用此内存以从该内存块的开头获取第x个长度。请注意,每个长片占用的存储空间比每个角色多。它可能是8个字节 - 因此您可以前往data[127]
或ptr[15]
。