相关疑难解决方法(0)

什么是`int*userMask [3] [4]`指向?

我正在修改一些代码并遇到一个声明,我无法理解:

int *userMask[3][4] = {0};
Run Code Online (Sandbox Code Playgroud)

究竟是什么指向?它是一个矩阵,每个元素都是指针吗?或者它指向一个大小的矩阵[3] [4]?

谢谢


我想我的问题是userMask[2][maskElement][user]当声明为什么时可以工作int.userMask不能让它int[]正常工作吗?我不能理解这个权利......

请注意,感谢您对cdecl Robert的建议.但是,有没有人知道如何在XP命令提示符中使用它?我只能得到语法错误:(

c arrays pointers

22
推荐指数
3
解决办法
1万
查看次数

如何将简单指针强制转换为固定大小的多维数组?

我有一个函数,它采用指向浮点数组的指针.基于其他条件,我知道指针实际上指向2x2 OR 3x3矩阵.(实际上内存最初是这样分配的,例如float M [2] [2])重要的是我想在函数体中做出这个决定,而不是作为函数参数.

void calcMatrix( int face, float * matrixReturnAsArray )
{
    // Here, I would much rather work in natural matrix notation
    if( is2x2 )
    {
        // ### cast matrixReturnAsArray to somethingAsMatrix[2][2]
        somethingAsMatrix[0][1] = 2.002;
        // etc..
    }
    else if(is3x3)
    { //etc...
    }

}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用模板和其他技术来更好地解决这个问题.我的问题是关于如何在###评论中进行这样的演员表.使用C++.

c c++ casting matrix multidimensional-array

20
推荐指数
2
解决办法
2万
查看次数

C多维数组是否连续没有孔?

我无法在C标准文档中找到它说多维数组是连续的.虽然可以从数组元素是连续的事实推断出来,但我想从社区中获得一些观点.

以下代码按照我期望的顺序打印出数字,即1 - 9.

#include <stdio.h>

int main()
{
    int a[][3] = {{1,2,3},{4,5,6},{7,8,9}};
    int* p = (int*)a;
    int i;

    for (i = 0; i < sizeof(a)/sizeof(int); i++)
        printf("%d ",p[i]);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c arrays multidimensional-array

7
推荐指数
3
解决办法
538
查看次数

带指针的二维数组

在下面可以解释执行时获得的输出:

#include<stdio.h>
void main()
{
char a[5][10]={"one","two","three","four","five"};
char **str=a;
printf("%p ", &a[0]);
printf("\n%p ", &str[0]);
printf("\n%p ", &str[3]);
printf("\n%p ", &str[1][56]);
printf("\n%p ", &(*(*(str+4)+1)));
}
Run Code Online (Sandbox Code Playgroud)

以下是观察到的输出:

0xbf7f6286 
0xbf7f6286 
0xbf7f6292 
0x38 
0x1 
Run Code Online (Sandbox Code Playgroud)
  • &a [0]是数组起始地址的地址
  • 和str [0]是相同的

    有人可以解释str [3]的地址是如何0xbf7f6292.根据我的理解,&str [0]和&str [3]应该相差30个字节.

    还请有人解释其他两种情况的输出方式.

提前致谢

c

5
推荐指数
2
解决办法
1229
查看次数

无法在初始化中将 'float****' 转换为 'float (*)[128][3][4]'

我有以下 2 个 typedef:

\n
typedef float matrix_3x4[3][4];\ntypedef matrix_3x4 bone_mat[128];\n
Run Code Online (Sandbox Code Playgroud)\n

以及以下函数定义:

\n
float ****get_bones();\n
Run Code Online (Sandbox Code Playgroud)\n

为什么下面的代码给我一个类型转换错误?

\n
bone_mat *mat = get_bones();\n
Run Code Online (Sandbox Code Playgroud)\n

错误:

\n
error: cannot convert \xe2\x80\x98float ****\xe2\x80\x99 to \xe2\x80\x98float (*)[128][3][4]\xe2\x80\x99 in initialization\n   85 |     bone_mat *mat = get_bones();\n      |                     ~~~~~~~~~^~\n      |                              |\n      |                              float****\n
Run Code Online (Sandbox Code Playgroud)\n

尝试将 的类型更改matbone_matbone_mat**,但不应float(*)[128][3][4]与 相同float****

\n

将函数的返回值转换为(bone_mat*)也不起作用。

\n

c arrays pointers matrix multidimensional-array

5
推荐指数
1
解决办法
88
查看次数

将2D数组分配给结构中的2D数组

我有一个函数试图循环结构中的2D数组:

typedef struct node
{
    int grid[3][3];
} Node;


void someFunction(Node *node) {
     int grid[3][3] = node->grid;
     //loop through
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它时,我得到了一个

mp.c:42:错误:初始化程序无效

c

3
推荐指数
1
解决办法
2946
查看次数

C - 多维数组的转换

可能重复:
C:创建指向二维数组的指针

定义数组时,如

int k[100];
Run Code Online (Sandbox Code Playgroud)

它可以转换为int*:

int* pk = k;
Run Code Online (Sandbox Code Playgroud)

它有一个指针变量,可以将多维数组转换为?

int m[10][10];
??? pm = m;
Run Code Online (Sandbox Code Playgroud)

c

3
推荐指数
1
解决办法
1344
查看次数

在 C 中为 3 维数组分配空间

这个问题已经在这里得到回答,但对我来说,有些事情仍然悬而未决,而且讨论太旧了,任何人都无法回复评论,此外我想问我的实现中出了什么问题。

无论如何,问题设置。我想为 3D 维度数组分配空间3, h, w。我在做什么:

int ***a = (int***)malloc(3 * sizeof(int*));
for (int i = 0; i < 3; i++)
{
   a[i] = (int **) malloc(height * sizeof(int*)); 
}
Run Code Online (Sandbox Code Playgroud)

我理解这是为三个 3 创建第一个空间int**,然后分配高度int**;然后 :

for (int i = 0; i < 3; i++)
{
  a[i][0] = (int *) malloc(height * width * sizeof(int *));
  for (int j = 1; j < height; j++)
   {
     a[i][j] = a[i][j-1] + width;
   }
}
Run Code Online (Sandbox Code Playgroud)

所以现在我认为每个a[i][0] …

c arrays pointers dynamic-memory-allocation

2
推荐指数
1
解决办法
3167
查看次数

C指向2维数组

我有一个二维数组指针的问题.指针应指向可变大小的数组.

// create pointer to 2 dimensional array
TimeSlot **systemMatrix; // this is a global variable
Run Code Online (Sandbox Code Playgroud)

在一个函数中我想创建一个新数组.

void setup(uint16_t lines, uint16_t coloumns) {
    // create 2 dimensional array. size can be set here.
    TimeSlot tmpTimeSlots[lines][coloumns];

    // make the pointer point to this array
    systemMatrix = tmpTimeSlots; // WARNING
}
Run Code Online (Sandbox Code Playgroud)

但是当我让指针指向数组时,编译器会说"警告:从不兼容的指针类型中分配".此外,当从另一个函数访问systemmatrix [2] [5]时,运行软件的mikrocontroller会出现硬故障.

稍后在访问tmpTimeSlots的元素时需要变量systemMatrix.

我试过像这样的组合

systemMatrix = *(*tmpTimeSlot);
Run Code Online (Sandbox Code Playgroud)

等等,但它们似乎都没有用.

任何帮助表示赞赏:)谢谢!

编辑:好的问题理解和解决,非常感谢!

c arrays pointers

1
推荐指数
1
解决办法
6570
查看次数