lil*_*roo 3 c arrays malloc pointers sizeof
我希望能够改变我的数组的大小,所以我这样创建一个:
int* array;
array = malloc(sizeof(int)*10);//10 integer elements
Run Code Online (Sandbox Code Playgroud)
我可以像往常一样使用它像数组一样,但是当我试图找到它的大小时:
size = sizeof(array)/sizeof(int);
Run Code Online (Sandbox Code Playgroud)
我得到了答案1,因为它没有将其识别为指向数组
如何获得阵列的大小?(我知道它在技术上不是一个数组,但有没有办法计算出分配的内存块的整个大小?)
我也正确地假设我在描述中说明了什么?如果我在技术上有所不及,请纠正我.
Ker*_* SB 10
指针是指针,而不是数组.它永远不会被"识别为数组",因为它不是数组.
完全由你来记住数组的大小.
例如:
struct i_must_remember_the_size
{
size_t len;
int * arr;
};
struct i_must_remember_the_size a = { 10, NULL };
a.arr = malloc(a.len * sizeof *a.arr);
Run Code Online (Sandbox Code Playgroud)
在C标准和可移植性中,这是不可能的。请注意,某些编译器提供非标准扩展(跟踪它,例如msize
)。
此外,sizeof
运算符无法告诉您块的大小,因此它会产生指针的大小(请记住,它sizeof
在编译时进行操作,可变长度数组除外)。
因此,您必须保留分配的大小,例如在数据结构中,例如:
#include <stddef.h>
typedef struct {
int *p;
size_t n;
} array;
Run Code Online (Sandbox Code Playgroud)