内存分配没有使用malloc分配,怎么样?

Ana*_*nda -1 c

以下是一个简单的代码段:

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个字节.

pad*_*ddy 5

因为它将它视为指针的整数元素偏移量.您已为单个整数分配了一个数组.当你要求p+2它时,它是一样的&p[2].如果您想从头开始使用两个字节,则需要将其强制转换为char*第一个:

char *highWordAddr = (char*)p + 2;
Run Code Online (Sandbox Code Playgroud)