Clo*_*oud 3 c c++ arrays pointers
我在访问传递给函数的数组元素时遇到了一些问题.
#define N (128)
#define ELEMENTS(10)
typedef int (*arrayOfNPointers)[N];
Run Code Online (Sandbox Code Playgroud)
所以,如果这是正确的,它是一个描述N指向数组的数据类型int.
我稍后单独初始化我的数组,如下所示:
arrayOfNPointers myPtrs = { 0 };
int i;
for (i=0; i<N; i++) {
myPtrs[i] = (int*)malloc(ELEMENTS);
}
Run Code Online (Sandbox Code Playgroud)
但是,这失败并出现以下错误:
error: incompatible types when assigning to type 'int[128]' from type 'int *'
Run Code Online (Sandbox Code Playgroud)
所以,我的语法似乎有些不对劲.但是在另一块代码中,我正在修改一些这样的结构的内容,我没有问题.
void doWork(void* input, void* output) {
int i,m,n;
arrayOfNPointers* inputData = (arrayOfNPointers*)input;
int* outputData = (int*)output;
for (m=0, n=0; n<nSamples; n++) {
for (i=0; i<nGroups; i++) {
outputData[m++] = (*inputData)[i][n];
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个阵列逻辑是否严重破坏?
typedef int (*arrayOfNPointers)[N];
Run Code Online (Sandbox Code Playgroud)
所以,如果这是正确的,它是一个描述N指针数组的数据类型.
我认为这是一个指向N个整数数组的指针,而不是指向整数的N个指针的数组....
这意味着以下行的行为不符合您的预期... myPtrs [i] =(int*)malloc(ELEMENTS); 因为myPtrs是指向N维数组的指针(在这种情况下是128个int的数组),myPtrs [i]是第i个n维数组.所以你试图指定一个指向数组的指针,这就是你得到msg的原因......
错误:从类型'int*'分配类型'int [128]'时出现不兼容的类型
我相信您正在寻找的是以下内容......
#define N 128
#define ELEMENTS 10
typedef int* arrayOfNPointers[N];
arrayOfNPointers myPtrs = { 0 };
int i;
for (i=0; i<N; i++) {
myPtrs[i] = malloc(sizeof( int ) * ELEMENTS);
}
Run Code Online (Sandbox Code Playgroud)
您希望 arrayOfPointer 是一个由 N 个指向 ELEMENTS 整数的指针组成的数组。另外,当您对整数空间进行 malloc() 时,您需要将 ELEMENTS 的数量乘以整数的大小。事实上,您分配的空间太小,无法容纳您尝试存储的数据。
您的 typedef 将 arrayOfPointer 声明为指向 N 个整数数组的指针。请记住使用从右到左的阅读规则来理解您所声明的变量/类型。因为(*arrayOfPointer)括号里没有任何东西在右边,而有一个指针指向左边,所以 arrayOfPointer 是一个指向[N](右)int(左)的指针。不是你想要的。
另外...不要在 C 中使用 malloc()!