C 指针数组
例如,可以声明C中的二维指针数组,如C 指针数组,c,arrays,dynamic,C,Arrays,Dynamic,例如,可以声明C中的二维指针数组,如int*x[][4],其中第一个索引可以在运行时固定为动态的,那么我可以说动态一维数组的动态声明可以通过某种方式实现,方法是将第二个索引替换为值1,如int*[[1]对于二维数组,动态二维数组byint*[][]1]是否calloc()malloc()内部使用它们是我的逻辑完全正确的,这是在C语言程序中函数内部使用动态数组声明的简单情况下应用的 例如,C语言中的二维指针数组类似于int*x[][4] 可以申报 只有两种情况: 当x的初始值设定项隐式传递第一个维
int*x[][4]
,其中第一个索引可以在运行时固定为动态的,那么我可以说动态一维数组的动态声明可以通过某种方式实现,方法是将第二个索引替换为值1,如int*[[1]
对于二维数组,动态二维数组byint*[][]1]
是否calloc()
malloc()
内部使用它们是我的逻辑完全正确的,这是在C语言程序中函数内部使用动态数组声明的简单情况下应用的
例如,C语言中的二维指针数组类似于int*x[][4]
可以申报
只有两种情况:
x
的初始值设定项隐式传递第一个维度的值时
int* x[][4] = { {NULL, NULL, NULL, NULL}, {NULL, NULL, NULL, NULL} };
int*(*)[4]
:指向int
的四个指针数组的指针。如果真的给出了第一维,情况也是如此
int*
的2D数组的第一个元素,并且可以对其进行索引,就好像它实际上指定了这样的2D数组一样。第一个维度的大小不会被传递,但是如果指针实际上指向一个对象,那么无论指向的对象是否被动态分配,出于函数的目的,该维度都是固定的
是的
动态那么我可以说动态声明动态吗
一维阵列可以通过替换
值1的第二个索引,如int*[[1]
该更改会产生一个静态上不同的类型(在它完全有效的上下文中)。在案例(2)中,而不是案例(1),这种类型和我们之前讨论的类型都可以指向动态分配的对象,但它们也可以指向适当类型的自动或静态持续时间对象。那里没有内在的动力
对于二维阵列
通过int*[][1]动态二维数组
不,甚至对于函数参数的类型也不是。最多可以省略(一)个引导维度
calloc()是malloc()吗
内部使用它们
一点也不。他们怎么可能?分配函数根本看不到此数据类型。您只告诉他们要分配多少空间,可以作为单个复合值(malloc
)或(元素计数、元素大小)对(calloc
)。因此,调用者需要知道需要多少内存。在任何情况下,这仅适用于情况(2)。案例(1)固有地产生静态或自动分配,而不是动态分配
我的逻辑正确吗
没有
这也适用于
是在一个非常简单的情况下,在
C语言程序中的函数
既不是作为函数的局部变量(案例1),也不是作为函数参数(案例2)。您有问题吗?是的-“我为什么要使我的帖子可读?”…可以声明C中的二维指针数组,如
int*x[][4]
。您使用的哪些C编译器和选项不会将其标记为错误(缺少数组大小)?或者您是在引用函数的参数?int*[[1]
仍然是一个二维数组。一维版本是int*[]
int*[][[1]
是非法的。只有第一个维度可以是动态的。
void foo(int* x[][4]);