我试图了解 malloc 和指针的工作原理。
#include <stdio.h>
#include <stdlib.h>
int main() {
int *p;
int b = 15;
p = (int *)malloc(sizeof(int) * 10);
for (int i = 0; i < 5; i++) {
p + i = &b;
}
}
上面的代码报错 表达式不可赋值 p + i = &b;
据我所知,malloc 给出了堆中分配的内存的起始地址,我将其类型转换为保存整数的地址。因此从技术上讲,p + i 应该能够保存任何整数地址,但代码会抛出错误。您能解释一下为什么这是错误的吗?谢谢
最佳答案
这行代码p = (int *)malloc(sizeof(int) * 10);
表示指针p被赋值为动态分配数组的第一个元素的地址malloc()
,它分配了一个由 10 个元素组成的 int
数组。
如果您想为其中 5 个元素分配 b
的值,那么您可以这样写:
for (int i = 0; i < 5; i++) {
p[i] = b;
}
但是,如果您想要一个包含 10 个整数指针的数组,并希望将其中 5 个分配给 b
的地址,那么您可以这样写:
int **pointer = (int **)malloc(sizeof(int *) * 10);
for (int i = 0; i < 5; i++) {
pointer[i] = &b;
}
完成后不要忘记释放动态分配的内存。
关于更改使用 malloc 创建的指针的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36827704/