c – 访问typedef’ed指针数组的元素
发布时间:2020-12-16 10:24:14 所属栏目:百科 来源:网络整理
导读:我在访问传递给函数的数组元素时遇到了一些问题. #define N (128)#define ELEMENTS(10)typedef int (*arrayOfNPointers)[N]; 所以,如果这是正确的,它是一个描述N指针数组的数据类型. 我稍后单独初始化我的数组,如下所示: arrayOfNPointers myPtrs = { 0 };i
我在访问传递给函数的数组元素时遇到了一些问题.
#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 10 typedef 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! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 漏洞之王:Flash将灭亡?Adobe推出Animate CC为其延续
- ios – 我们可以将数据从表格单元格传递到表格视图,其中两个
- ruby-on-rails – rails 3 heroku push master问题
- error LNK2001: 无法解析的外部符号 "class cocos2d::V
- xml – 如何获取节点值/ innerHTML与xpath?
- ruby-on-rails – 资源的单个视图上的不同布局和路由
- Flex与Java的交互通信
- ruby – 使用Mechanize的登录表单
- c# – 为什么StreamReader.EndOfStream属性更改BaseStream.
- 关于在Swift中重写类属性的困惑