2010-09-28 116 views
2

你能向我解释一下这里发生了什么?指针问题

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

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

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

谢谢。

+0

已标记为已答复百遍以上 – 2010-09-28 22:26:33

回答

0

它正在将数据指针作为指针指向long。

线:

char data[128]; 

将分配128个字节的存储器和处理该数据作为字符。的代码:

long * ptr; 
ptr = (long *) data; 

分配一个指针指向一个长,并将该指针在由char data[128];分配的内存到另一个点。

您可以通过data[x]来引用此内存,以获得从此内存块开始处开始的第x个字符。或者你可以通过ptr[x]来引用这个内存来获得这个内存块开始的第x个长开始。请注意,每个长字占用的存储空间比每个字符多。它可能是8个字节 - 所以你可以去data[127]ptr[15]

0

(long *)是一个类型转换。由于datachar的数组,因此需要使用此类型转换来指定ptr,这是一个long *指针。你的“是否意味着”这句话是正确的。

0

该语句表示获取数据(这是128个字符的开始的存储器地址),并将该存储器地址视为长数的开始。

这似乎是非常冒险和愚蠢的。

这是有什么特别的原因吗?

0

(long *)是演员。它告诉编译器“这里有你的char[128]?把它当作long *”。但是,您将其指定给char *指针,其中a)是一个无效的赋值,没有从long *char *转换,并且b)不会保留该变量的...经度...。

基本上,在这个特殊的例子中没有意义。我怀疑这是因为你修改了原来的代码来显示在这里 - 你能告诉我们它的实际外观吗?

3

(long*)表达式是C风格演员。它处理由data指向的内存并将其视为指向数据类型的指针long

1

它是一个“C风格”类型;在你的情况下,它转化为“重新解释演员”。阅读它为“采取一个char类型的指针,并将其视为如果它指向long”。编写它的首选方式是reinterpret_cast<long>(ptr)。请注意,有效索引是从0到128 * sizeof(char)/sizeof(long) - 1,这在平台之间可能有所不同。