指针算术,将char指针添加到int

时间:2015-04-14 22:39:17

标签: pointers

我有以下代码:

unsigned int a = 1;
unsigned int b = 2;
char *c = "Something";

unsigned int d = *(unsigned int *)(c + a + b);

我并不确切知道它的作用。

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

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

因为你转换为指向unsigned int的指针,所以你得不到字母'e'。机器将读取符合unsigned int的字符数,并将它们放在机器正在使用的任何字节序中,以获得无符号的int值。

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