【发布时间】:2013-12-04 21:02:04
【问题描述】:
C 对我来说是一门相当新的语言,我的大部分编程知识都是基于 Java 或基于 Web 的语言 - 所以如果我遇到这个问题的完全菜鸟,请不要客气!
我有一个 unsigned long 类型的数组,大小为 100000,在 main() 中声明。当满足用户输入的某个条件时,会进行record() 函数调用,该函数会启动一些硬件以开始录音(对于问题的范围而言并不重要)。
在record() 函数调用中,只要寄存器中的“就绪”标志被初始化,寄存器的内容就会被复制到一个数组单元中——这个过程会迭代直到数组的所有 100000 个单元都被记录下来到。
来自record() 函数的数组现在需要返回到main() 中的变量。我通过简单地从方法调用中返回一个unsigned long 类型的变量来尝试这个 - 但我似乎无法完成这项工作。我也使用指针尝试过这个 - 但是当我尝试这个时,我对 C 的缺乏经验就显示出来了。
我使用指针的代码是:
int main(void){
...
unsigned long recordingOne[100000];
unsigned long *ptrOne;
ptrOne = &recordingOne;
...
initiateRecording(ptrOne);
}
void initiateRecording(unsigned long *ptr){
unsigned long returnOne[100000];
for(i = 0; i<100001; i++){
returnOne[i] = AD0DR1 //AD0DR1 corresponds to hardware register
}
*ptr = returnOne;
}
为此,我收到两个警告:
(in function main) warning: assignment from incompatible pointer type [enabled by default]
(in function initiateRecording) warning: assignment makes integer from pointer without a cast [enabled by default]
当我之前在没有指针的情况下尝试过此操作时,我尝试将数组作为参数传递,然后返回一个数组。看起来像这样:
int main(void){
...
unsigned long recordingOne[100000];
...
recordingOne = initiateRecording();
}
unsigned long[] initiateRecording(){
unsigned long toReturnOne[100000];
for(i = 0; i<100001; i++){
toReturnOne[i] = AD0DR1 //AD0DR1 corresponds to hardware register
}
return toReturnOne;
}
编译器也不喜欢这个 - 我正在努力声明一个 unsigned long 类型的返回对象,它也是一个数组。
一如既往,非常感谢您的帮助!
【问题讨论】:
-
当前正在阅读,但将您的一个参考从
100001更改为100000。 -
天啊!我校对了它和一切!
标签: c arrays pointers long-integer unsigned