如果我只为单个int分配4个字节,那么指针如何存储第二个int?

Hur*_*y H 1 c memory malloc pointers

正如我在一个网站上发现的以下代码:

#include <stdio.h>   
#include <stdlib.h> 

int main(void) 
{
    int *p1 = malloc(4*sizeof(int));  // allocates enough for an array of 4 int
    int *p2 = malloc(sizeof(int[4])); // same, naming the type directly
    int *p3 = malloc(4*sizeof *p3);   // same, without repeating the type name

    if(p1) {
        for(int n=0; n<4; ++n) // populate the array
            p1[n] = n*n;
        for(int n=0; n<4; ++n) // print it back out
            printf("p1[%d] == %d\n", n, p1[n]);
    }

    free(p1);
    free(p2);
    free(p3);
}
Run Code Online (Sandbox Code Playgroud)

输出:

p1 [0] == 0

p1 [1] == 1

p1 [2] == 4

p1 [3] == 9

现在按照上面的代码执行此操作:

#include <stdio.h>
#include <stdlib.h>
#include "Header.h"

int main()

{

    int  *ip = (int*)malloc(1 * sizeof(int));

    ip[0] = 2;
    ip[1] = 9;

    printf("%d %d",ip[0],ip[1]);



    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:2 9

那么,当我只为单个int分配字节时,我的指针* ip如何存储多个int?

JL2*_*210 5

您正在写入超出数组范围的内存。令人遗憾的是,没有编译器对此进行检查,但有时它可以工作。

注意:这是未定义的行为,在任何情况下都不应使用。