指针问题

时间:2010-09-28 22:24:18

标签: c++ c pointers

你能告诉我这里发生了什么吗?

char data[128]; // Create char array of size 128.
long * ptr;     // Create a pointer.
ptr = (long *) data;   // ??

主要是,(长*)是什么意思?

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

谢谢。

6 个答案:

答案 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 *)是一个类型转换。由于datachar的数组,因此需要此类型转换才能将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]