我正在修改一些代码并遇到一个声明,我无法理解:
int *userMask[3][4] = {0};
Run Code Online (Sandbox Code Playgroud)
究竟是什么指向?它是一个矩阵,每个元素都是指针吗?或者它指向一个大小的矩阵[3] [4]?
谢谢
我想我的问题是userMask[2][maskElement][user]当声明为什么时可以工作int.userMask不能让它int[]正常工作吗?我不能理解这个权利......
请注意,感谢您对cdecl Robert的建议.但是,有没有人知道如何在XP命令提示符中使用它?我只能得到语法错误:(
我有一个函数,它采用指向浮点数组的指针.基于其他条件,我知道指针实际上指向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标准文档中找到它说多维数组是连续的.虽然可以从数组元素是连续的事实推断出来,但我想从社区中获得一些观点.
以下代码按照我期望的顺序打印出数字,即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) 在下面可以解释执行时获得的输出:
#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)
和str [0]是相同的
有人可以解释str [3]的地址是如何0xbf7f6292.根据我的理解,&str [0]和&str [3]应该相差30个字节.
还请有人解释其他两种情况的输出方式.
提前致谢
我有以下 2 个 typedef:
\ntypedef float matrix_3x4[3][4];\ntypedef matrix_3x4 bone_mat[128];\nRun Code Online (Sandbox Code Playgroud)\n以及以下函数定义:
\nfloat ****get_bones();\nRun Code Online (Sandbox Code Playgroud)\n为什么下面的代码给我一个类型转换错误?
\nbone_mat *mat = get_bones();\nRun Code Online (Sandbox Code Playgroud)\n错误:
\nerror: 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****\nRun Code Online (Sandbox Code Playgroud)\n尝试将 的类型更改mat为bone_mat或bone_mat**,但不应float(*)[128][3][4]与 相同float****?
将函数的返回值转换为(bone_mat*)也不起作用。
我有一个函数试图循环结构中的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:创建指向二维数组的指针
定义数组时,如
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) 这个问题已经在这里得到回答,但对我来说,有些事情仍然悬而未决,而且讨论太旧了,任何人都无法回复评论,此外我想问我的实现中出了什么问题。
无论如何,问题设置。我想为 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] …
我有一个二维数组指针的问题.指针应指向可变大小的数组.
// 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)
等等,但它们似乎都没有用.
任何帮助表示赞赏:)谢谢!
编辑:好的问题理解和解决,非常感谢!