下面的代码片段使用malloc函数声明了一个4×10的二维数组
/* Declare a pointer to an array that has 10
ints in each row. */
int (*p)[10];
register int i, j;
/* allocate memory to hold a 4 x 10 array */
p = malloc(40*sizeof(int));
但我不明白p是如何变成二维数组的.最初,p被声明为指向int的指针数组。打电话给malloc之后会发生什么?我无法理解这一点。
我现在正在学习c,我正在学习指针。我读过一些例子,我想出了以下几个例子:
#include <stdio.h>
int main ()
{
float balance[10][5];
float *p;
p = (float *) balance;
*(p + 16) = 200.0; //init the balance[3][1] with the value 200.0
printf("%f\n", balance[3][1]);
return 0;
我在KN King的书的第269页上看到了这句话
int a[ROWS][COLS], (*p)[COLS];
p = &a[0];
p现在指向二维数组的第一行。我理解为什么a[0]指向二维数组的第一行。但是我不理解声明p的语法。这是什么意思,我如何记住它?
*p周围的括号是做什么的?(*p),根据操作符优先级,这个语法是什么意思?
在一个小的C++示例中遇到了下面显示的代码:
int (*arr1)[ARRAY_SIZE];
int (*arr2)[ARRAY_SIZE];
int (*arr3)[ARRAY_SIZE];
然后在类的构造函数中:
ParallelMultiply::ParallelMultiply(int mat1[ARRAY_SIZE][ARRAY_SIZE],
int mat2[ARRAY_SIZE][ARRAY_SIZE],
int result_mat[ARRAY_SIZE][ARRAY_SIZE]):arr1(m
该函数需要一个指向二维数组[4][5]的指针.实际上,我们可以提交一个指向一维数组[20]的指针.Ie源代码如下所示:
extern f (int a[4][5]);
int b[20];
void func (void)
{
f (b);
}
这是完美的工作代码(如果内部的数组b,我们将像他们在一个二维数组的布局)。不过,汇编将发出警告(由于类型不足):
$ gcc t.c -c
t.c: In function 'func':
t.c:7: warning: passing argument 1 of 'f' from incompatible poin
我有一个二维数组。第一个维度有固定的大小,我动态地创建第二个维度。e.g
int **arr;
*arr=( int * ) malloc ( X * sizeof ( int )) // X is input from user
我想做的是创建第二个维度,并在它的末尾写入值。
例如,我使用以下命令为arr创建第二维
arr[0]=( int * ) malloc ( 2 * sizeof ( int ))
然后我想在这个第二维中写入值,但不知道索引。许多编程语言都有array.push方法,该方法在不知道数组的索引或长度的情况下将项推入数组的末尾。我如何在C中实现这样的结果?
我想在visual studio 2017 c中初始化一个大小可变的二维数组。它是一个具有整数维数的简单正方形。然而,我得到了下面的错误,缺少下标,并且不能分配一个固定大小为0的数组。
int dim = 10;
short square [dim][dim];
使用malloc不能像以前那样使用二维,这意味着其余的代码不再工作,在visual studio 2017中仍然使用具有可变大小的二维数组的最佳解决方案是什么?
int *arr = (int *)malloc(row * col * sizeof(int));
我有一个this函数,它需要一个二维整数数组: void Add_Binary_To_Matrix(int (*qrMatrix)[21], int *binPtr,
int x, int y, int count, int skipper, int direction) 这个数组是一个一维指针数组,但是我给每一行增加了内存(这也使它成为一个二维整数数组,对吗?): int *qrCopy[currentVersion->height];
for (int i = 0; i < currentVersion->height; i++)
qrCopy
我正在学习C语言,但在将二维数组的指针传递给另一个打印二维数组的函数时遇到了问题。任何帮助都将不胜感激。
int main( void ){
char array[50][50];
int SIZE;
...call function to fill array... this part works.
printarray( array, SIZE );
}
void printarray( char **array, int SIZE ){
int i;
int j;
for( j = 0; j < SIZE; j++ )