c – 访问typedef’ed指针数组的元素

c – 访问typedef’ed指针数组的元素,第1张

概述我在访问传递给函数的数组元素时遇到了一些问题. #define N (128)#define ELEMENTS(10)typedef int (*arrayOfNPointers)[N]; 所以,如果这是正确的,它是一个描述N指针数组的数据类型. 我稍后单独初始化我的数组,如下所示: arrayOfNPointers myPtrs = { 0 };int i;for (i=0; i<N; 我在访问传递给函数的数组元素时遇到了一些问题.

#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指针数组的元素所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1219878.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存