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

标签 c pointers

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

相关文章:

c++ - 在函数中分配后的空指针

c - : syntax error near unexpected token `(' ?

c - 为什么我的链接列表实现中的 Push() 函数显示这种行为?

c++ - 是否有已释放指针对象的既定指针值?

C语言和迷你板

c# - 在 C# 中创建 int 数组的指针?

c++迭代后破坏对象的问题

c - 在 PostgreSQL 中准备、存储、检索加密数据

c - 加载数据函数需要 C 语言帮助

c - 程序中的小问题