gpt4 book ai didi

更改使用 malloc 创建的指针的地址

转载 作者:行者123 更新时间:2023-11-30 17:01:46 26 4
gpt4 key购买 nike

我试图了解 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com