以下是一个简单的代码段:
int main()
{
int *p;
p=(int*)malloc(sizeof(int));//allocate m/y 4 1 int
printf("P=%p\tQ=%p",p,p+2);
}
Run Code Online (Sandbox Code Playgroud)
在一个示例运行中,它给出了如下输出:
P=0x8210008 Q=0x8210010
Run Code Online (Sandbox Code Playgroud)
P的起始地址是-P = 0x8210008,下一个字节是0x8210009,下一个字节是0x821000A,下一个字节是0x821000B.因此int的4个字节在那里结束.我们没有使用malloc分配更多内存.那么p + 2如何将我们引向0x8210010,这是P(0x8210008)之后的8个字节.
因为它将它视为指针的整数元素偏移量.您已为单个整数分配了一个数组.当你要求p+2它时,它是一样的&p[2].如果您想从头开始使用两个字节,则需要将其强制转换为char*第一个:
char *highWordAddr = (char*)p + 2;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
828 次 |
| 最近记录: |