2015-04-14 35 views

回答

0

将一个整数添加到一个指针将指针偏移指针结构的大小。

例如,让我们拿一个char *指针,并假定在我的机器中char是8位。

char* a="HELLO!!!" 

指向'H'的指针,现在当您向其中添加'3'时,它现在指向'L'。

现在在第二步中将其转换为'unsigned int *'。假设我系统上的'unsigned int'是32位,这么做的'unsigned int *'指向的是32位长的东西。所以当你这样做时,

char* a="HELLO!!!"; 
a+=3; //a now points to 'L' 
unsigned int* ptr=(unsigned int*)(a); // ptr now points to an integer which 
//is 32 bits wide. 
unsigned d=*ptr; 

现在最后一步是分配'LLO!'的ASCII值。 (32位)存储到d。

0

在C中,foo[i]表示与*(foo+i)相同。因此,在您的示例中,*(c + a + b)表示c[a+b]c[3],它是字母'e'。

因为你投射到一个指向unsigned int的指针,所以你不会得到字母'e'。该机器将读取尽可能多的字符以适应unsigned int,并将它们放在您的机器正在使用的任何字节顺序中,以获取无符号的int值。

换句话说,你得到的东西没有定义,但是如果你知道代码运行的机器的特性,那么它就是可以预测的。