#define N (128)#define ELEMENTS(10)typedef int (*arrayOfNPointers)[N];
所以,如果这是正确的,它是一个描述N指针数组的数据类型.
我稍后单独初始化我的数组,如下所示:
arrayOfNPointers myPtrs = { 0 };int i;for (i=0; i<N; i++) { myPtrs[i] = (int*)malloc(ELEMENTS);}
但是,这失败并出现以下错误:
error: incompatible types when assigning to type 'int[128]' from type 'int *'
所以,我的语法似乎有些不对劲.但是在另一块代码中,我正在修改一些这样的结构的内容,我没有问题.
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]; } }}
这个阵列逻辑是否严重破坏?
解决方法 我相信你正在寻找的是以下……#define N 128#define ELEMENTS 10typedef int* arrayOfNPointers[N];arrayOfNPointers myPtrs = { 0 };int i;for (i=0; i<N; i++) { myPtrs[i] = malloc(sizeof( int ) * ELEMENTS);}
您希望arrayOfPointer是一个N指向ELEMENTS整数的数组.另外,当malloc()为整数空间时,需要将ELEMENTS的数量乘以整数的大小.实际上,您分配的空间太小,无法容纳您尝试存储在其中的数据.
您的typedef将arrayOfPointer声明为指向N个整数数组的指针.请记住使用左右阅读规则来了解您声明变量/类型的内容.因为你在parens中有(* arrayOfPointer),右边没有任何东西,左边有一个指针,所以arrayOfPointer是一个指针TO [N](右)int(左).不是你想要的.
还…… do not cast malloc() in C!
总结以上是内存溢出为你收集整理的c – 访问typedef’ed指针数组的元素全部内容,希望文章能够帮你解决c – 访问typedef’ed指针数组的元素所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)