为了举例说明,可以声明像int* x[][4]这样的C中的二维指针数组,其中第一个索引可以在运行时固定为动态的,然后我可以说动态一维数组的动态声明可以以某种方式实现,方法是将第二个索引替换为值1(如int*[][1] ),对于int*[][][1]的二维数组动态二维数组,int*[][][1]在calloc() malloc()内部使用它们的逻辑是完全正确的,这是在C语言程序的函数内部使用动态数组声明的简化情况下应用的。
发布于 2018-01-23 17:32:47
为了举例说明,可以声明C类
int* x[][4]中的二维指针数组
只有两种情况:
x的初始化器隐式传递第一个维度的值时,
int* x={ {NULL,NULL},{NULL,NULL };int *(*)[4]:指针类型为int的四个指针的数组。如果给出第一个维度的话,情况也是如此。
无效foo(int* x);,其中第一个索引可以在运行时修复。
在上面(1)的情况下,没有,第一个维度是在编译时确定的。
如果(2)以上,不完全是。然后是指向一维数组的指针的声明。这样的指针可以指向int *的2D数组的第一个元素,并且它可以被索引,就好像它实际上指定了这样一个2D数组。第一个维度的大小不被传递,但是如果指针实际上指向一个对象,那么该维度是为函数的目的而固定的,不管指向对象是否是动态分配的。
它是动态的,那么我是否可以说动态一维数组的动态声明可以通过将第二个索引替换为像int*那样的值1来实现呢?
这种更改会产生一种静态的不同类型(在完全有效的上下文中)。在案例(2)中,而不是案例(1)中,这种类型和我们前面讨论的类型都可以指向动态分配的对象,但也可以指向适当类型的自动或静态持续时间对象。没有什么内在的动态。
对于二维数组,采用int*1动态二维数组。
不是的。甚至对于函数参数的类型也是如此。最多可以省略(1)引导维数。
calloc() malloc()内部使用它们吗?
不用谢。他们怎么能这样?分配函数根本没有看到这种数据类型。您只告诉他们要分配多少空间,无论是作为单个复合值(malloc)还是作为(元素计数、元素大小)对(calloc)。因此,调用方需要知道需要多少内存。在任何情况下,这只适用于(2)。Case (1)固有地产生静态或自动分配,而不是动态的。
我的逻辑完全正确吗?
不是的。
这是在C语言程序的函数内部使用动态数组声明的简单情况下的应用。
既不是函数的局部变量(案例1),也不是函数参数(案例2)。
https://stackoverflow.com/questions/48406690
复制相似问题