指针的算术运算
2014-09-26 12:31
381 查看
指针的算术运算
C语言允许你在指针执行整数的加减运算。如果pnptr指向一个整数,pnptr + 1 pnptr后在内存中的地址的下一个整数。pnptr - 1是在pnptr以前的整数地址。
请注意,pnptr + 1不在pnptr返回地址,但下一个对象,pnptr分型。如果pnptr指向一个整数(假设4字节),pnptr + 3意味着在pnptr 3个整数,这是12个地址后pnptr。如果pnptr指向一个char,这始终是1字节,pnptr + 3意味着在pnptr 3字符,这是3个地址后pnptr。
计算一个指针的算术表达式的结果时,编译器总是乘以整数操作数所指对象的大小。这就是所谓的缩放。
下面的程序:
正如你所看到的,这些地址不同(7C 4 + 4 = 80的十六进制)。这是因为一个整数是4个字节,笔者的机器。
使用短而不是在同一程序:
C语言允许你在指针执行整数的加减运算。如果pnptr指向一个整数,pnptr + 1 pnptr后在内存中的地址的下一个整数。pnptr - 1是在pnptr以前的整数地址。
请注意,pnptr + 1不在pnptr返回地址,但下一个对象,pnptr分型。如果pnptr指向一个整数(假设4字节),pnptr + 3意味着在pnptr 3个整数,这是12个地址后pnptr。如果pnptr指向一个char,这始终是1字节,pnptr + 3意味着在pnptr 3字符,这是3个地址后pnptr。
计算一个指针的算术表达式的结果时,编译器总是乘以整数操作数所指对象的大小。这就是所谓的缩放。
下面的程序:
1 2 3 4 5 6 7 int nValue = 7; int *pnPtr = &nValue; cout << pnPtr << endl; cout << pnPtr+1 << endl; cout << pnPtr+2 << endl; cout << pnPtr+3 << endl;
正如你所看到的,这些地址不同(7C 4 + 4 = 80的十六进制)。这是因为一个整数是4个字节,笔者的机器。
使用短而不是在同一程序:
1 2 3 4 5 6 7 short nValue = 7; short *pnPtr = &nValue; cout << pnPtr << endl; cout << pnPtr+1 << endl; cout << pnPtr+2 << endl; cout << pnPtr+3 << endl; Outputs: