gpt4 book ai didi

c - (int*) 在 c 中动态分配 int 数组时

转载 作者:行者123 更新时间:2023-11-30 20:21:16 27 4
gpt4 key购买 nike

所以我对如何创建一个返回指向 C 中整数数组的指针的函数有点困惑。我知道你不能这样做:

int* myFunction() {
int myInt[aDefinedSize];
return myInt; }

因为这是返回一个指向局部变量的指针。所以,我想到了这一点:

int* myFunction(){
int* myInt = (int) malloc(aDefinedSize * sizeof(int));
return myInt; }

这给出了错误:警告从指针转换为不同大小的整数这意味着使用它,它可以工作:

int* myFunction(){
int* myInt = (int*) malloc(aDefinedSize * sizeof(int));
return myInt; }

但令我困惑的是:向我解释 malloc 之前的 (int*) 是为了执行此操作:它告诉编译器所分配的内存的数据类型是什么。例如,当您单步遍历数组并且编译器需要知道要增加多少字节时,就会使用它。那么,如果我得到的这个解释是正确的,那么内存不是被分配给 aDefinedSize 数量的指向 int 的指针,而不是实际上的 int 吗?因此, myInt 不是一个指向 int 指针数组的指针吗?如果能帮助理解这一点那就太好了。谢谢!!

最佳答案

So, if this explanation I was given is correct, isn't memory being allocated for aDefinedSize number of pointers to ints, not actually ints?

不,您要求 malloc 获取 aDefinedSize * sizeof(int) 字节,不是aDefinedSize * sizeof(int *) 字节。这就是您获得的内存大小,类型取决于用于访问内存的指针。

Thus, isnt myInt a pointer to an array of pointers to ints?

不,因为您将其定义为 int *,即指向 int 的指针。

当然,指针不知道分配的内存有多大,而仅指向适合那里的第一个 int。作为程序员,您需要跟踪大小。

请注意you shouldn't use that explicit typecastmalloc 返回一个 void *,它可以默默地分配给任何指针,如下所示:

int* myInt = malloc(aDefinedSize * sizeof(int));

指针上的算术以指向类型的步幅进行,即使用 int *p 时,p[3]*( 相同p+3),大致意思是“转到 p,以字节为单位前进三倍 sizeof(int),然后访问该位置” 。int **q 将是一个指向 int 指针的指针,并且可能指向一个指针数组。

关于c - (int*) 在 c 中动态分配 int 数组时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43306932/

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