Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 指针数组_C_Arrays_Dynamic - Fatal编程技术网

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的初始值设定项隐式传递第一个维

例如,可以声明C中的二维指针数组,如
int*x[][4]
,其中第一个索引可以在运行时固定为动态的,那么我可以说动态一维数组的动态声明可以通过某种方式实现,方法是将第二个索引替换为值1,如
int*[[1]
对于二维数组,动态二维数组by
int*[][]1]
是否
calloc()
malloc()
内部使用它们是我的逻辑完全正确的,这是在C语言程序中函数内部使用动态数组声明的简单情况下应用的

例如,C语言中的二维指针数组类似于
int*x[][4]
可以申报

只有两种情况:

  • x
    的初始值设定项隐式传递第一个维度的值时

    int* x[][4] = { {NULL, NULL, NULL, NULL}, {NULL, NULL, NULL, NULL} };
    
  • 作为函数参数的类型。在这种情况下,它完全等同于将参数声明为具有类型
    int*(*)[4]
    :指向
    int
    的四个指针数组的指针。如果真的给出了第一维,情况也是如此

  • ,其中第一个索引可以在运行时固定

    在上面的情况(1)中,否,第一个维度是在编译时确定的

    在上述第(2)种情况下,不完全如此。然后是指向1D数组的指针的声明。这样的指针可以指向
    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]);