在C中的函数调用中为指针分配内存

汤玛士

我制作了一个示例程序来说明问题。test我分配内存foo以存储两个整数。然后,我将每个这些整数设置为一个值,然后打印它们。非常简单,除了我只能在in内进行赋值给整数-当在in内进行赋值main时将不起作用test


此代码有效:

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

void test(int **foo) {
    *foo = malloc(2 * sizeof(int));
}

int main() {
    int *foo;

    test(&foo);

    foo[0] = 4;  // <---
    foo[1] = 3;  // <---

    printf("foo[0]: %d\n", foo[0]);
    printf("foo[1]: %d\n", foo[1]);

    return 0;
}

输出:

foo[0]: 4
foo[1]: 3

这段代码没有:

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

void test(int **foo) {
    *foo = malloc(2 * sizeof(int));  // 3.
    *foo[0] = 4;  // 4. <---
    *foo[1] = 3;  // 5. <---
}

int main() {
    int *foo;  // 1.

    test(&foo);  // 2.

    printf("foo[0]: %d\n", foo[0]);
    printf("foo[1]: %d\n", foo[1]);

    return 0;
}

输出:

foo[0]: 4        // This is only 4 because it was already
                 //   4 from running the previous example
foo[1]: 5308612  // And this is obviously garbage

发生什么了?这个答案非常有帮助(或者我认为至少是这样),但是它并没有解决为什么分配工作起作用的问题,main但是没有解决test

这是我对第二个示例中的代码应如何工作的理解(我在代码中添加了脚注以指示我在此处引用的行):

  1. 该程序从开始main我创建一个整数点foo,在(为了简单起见)address处分配了一个4字节的内存块1000

  2. 我发送了foo对该函数的引用test因此,将其1000作为其参数传递

  3. 为分配了一个大小为两个整数(8个字节)的内存块foo

  4. 4 存储在地址 1000

  5. 3 存储在地址 1004

那么,我的误解是什么,以及如何在第二个示例中修复代码,以便可以footest而不是中进行初始化main

谢谢!

乔纳森·勒夫勒(Jonathan Leffler)

优先!

你需要:

(*foo)[0] = 4;  // 4. <---
(*foo)[1] = 3;  // 5. <---

没有括号,*foo[0]is *(foo[0]),实际上与相同(*foo)[0],但是*(foo[1])写了who-knows-where。*运营商结合不太紧密比[]运营商做,所以你必须使用括号。

char *arr[];   // array of pointers to char
char (*arr)[]; // pointer to array of char

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C中的函数调用中为指针分配内存

来自分类Dev

函数指针分配并在C ++中调用?

来自分类Dev

重新分配的内存比最初为C中的指针少

来自分类Dev

为结构C ++中的指针分配和删除内存

来自分类Dev

为结构C ++中的指针分配和删除内存

来自分类Dev

重新分配的内存少于最初为C中的指针分配的内存

来自分类Dev

从R语言调用的C函数中的动态内存分配

来自分类Dev

在C中为函数指针参数分配数组

来自分类Dev

理解c中的内存分配和指针

来自分类Dev

在函数中为结构分配内存

来自分类Dev

如何调用以指针数组为参数的函数?在C中

来自分类Dev

如何将指针传递给函数并在函数C ++中动态分配内存

来自分类Dev

如何清除在C ++中为指针正确指向的数组分配的内存?

来自分类Dev

在 C++ 中为我自己的基于指针的数组分配内存的正确方法

来自分类Dev

MATLAB中形式为x = f(x)的函数调用的内存分配

来自分类Dev

是否为函数调用中的实际参数指定的字符数组分配了内存?

来自分类Dev

是否为函数调用中的实际参数指定的字符数组分配了内存?

来自分类Dev

在C中为Fortran可分配的内存

来自分类Dev

在C中为结构类型分配内存

来自分类Dev

在 C++ 中为 char* 分配内存

来自分类Dev

指向结构指针的指针中的内存分配

来自分类Dev

在C中的函数内动态分配函数中的内存

来自分类Dev

在C中的结构内的指针数组的动态内存分配

来自分类Dev

无法将内存分配给c中的指针

来自分类Dev

C中具有动态内存分配的指针向量

来自分类Dev

C中结构指针的内存分配数组

来自分类Dev

在C ++中为已分配的内存分配值

来自分类Dev

在Nim中为函数指针分配前向声明的原型

来自分类Dev

C ++中的指针分配

Related 相关文章

  1. 1

    在C中的函数调用中为指针分配内存

  2. 2

    函数指针分配并在C ++中调用?

  3. 3

    重新分配的内存比最初为C中的指针少

  4. 4

    为结构C ++中的指针分配和删除内存

  5. 5

    为结构C ++中的指针分配和删除内存

  6. 6

    重新分配的内存少于最初为C中的指针分配的内存

  7. 7

    从R语言调用的C函数中的动态内存分配

  8. 8

    在C中为函数指针参数分配数组

  9. 9

    理解c中的内存分配和指针

  10. 10

    在函数中为结构分配内存

  11. 11

    如何调用以指针数组为参数的函数?在C中

  12. 12

    如何将指针传递给函数并在函数C ++中动态分配内存

  13. 13

    如何清除在C ++中为指针正确指向的数组分配的内存?

  14. 14

    在 C++ 中为我自己的基于指针的数组分配内存的正确方法

  15. 15

    MATLAB中形式为x = f(x)的函数调用的内存分配

  16. 16

    是否为函数调用中的实际参数指定的字符数组分配了内存?

  17. 17

    是否为函数调用中的实际参数指定的字符数组分配了内存?

  18. 18

    在C中为Fortran可分配的内存

  19. 19

    在C中为结构类型分配内存

  20. 20

    在 C++ 中为 char* 分配内存

  21. 21

    指向结构指针的指针中的内存分配

  22. 22

    在C中的函数内动态分配函数中的内存

  23. 23

    在C中的结构内的指针数组的动态内存分配

  24. 24

    无法将内存分配给c中的指针

  25. 25

    C中具有动态内存分配的指针向量

  26. 26

    C中结构指针的内存分配数组

  27. 27

    在C ++中为已分配的内存分配值

  28. 28

    在Nim中为函数指针分配前向声明的原型

  29. 29

    C ++中的指针分配

热门标签

归档