kmalloc(size(結構體)*n)就是申請n個大小為結構體的空間,然后返回一個指向這個空間的首地址的指針。這個指針可以看作是一個數組,它的每個元素都是結構體,所以可以使用索引來訪問這個空間的不同部分。例如,如果你有一個指針p,它指向一個由三個struct foo類型的結構體組成的空間,那么你可以用p[0]、p[1]和p[2]來訪問這三個結構體。你也可以用p、p+1和p+2來表示這三個結構體的地址。這里有一個簡單的例子,你可以在你的電腦上運行它,看看它的輸出。
#include <stdio.h>
#include <stdlib.h>struct foo {int a;char b;
};int main() {struct foo *p = (struct foo *)malloc(3 * sizeof(struct foo)); //申請三個struct foo類型的空間if (p == NULL) {printf("malloc failed\n");return -1;}p[0].a = 10; //給第一個結構體的a賦值為10p[0].b = 'A'; //給第一個結構體的b賦值為'A'p[1].a = 20; //給第二個結構體的a賦值為20p[1].b = 'B'; //給第二個結構體的b賦值為'B'p[2].a = 30; //給第三個結構體的a賦值為30p[2].b = 'C'; //給第三個結構體的b賦值為'C'for (int i = 0; i < 3; i++) {printf("p[%d].a = %d, p[%d].b = %c\n", i, p[i].a, i, p[i].b); //打印每個結構體的a和bprintf("p + %d = %p\n", i, p + i); //打印每個結構體的地址}free(p); //釋放空間return 0;
}