gpt4 book ai didi

c - 在 C 中传递非全局数组变量

转载 作者:行者123 更新时间:2023-12-04 04:32:20 24 4
gpt4 key购买 nike

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 类型的返回对象。那也是一个数组。

与往常一样,非常感谢您的帮助!

最佳答案

这是最好的方法:

int main(void)
{
...
unsigned long recordingOne[100000];
unsigned long *ptrOne; // <<<--- Don't need this
ptrOne = &recordingOne; // <<<--- Don't need this
...
initiateRecording(recordingOne); <<<--- Pass address of array directly
}

void initiateRecording(unsigned long *ptr)
{
for(i = 0; i<100000; i++) <<<---- If i == 100000 undefined behavior, such as a segmentation fault, may occur; change 100001 to 100000
ptr[i] = AD0DR1 // <<<--- write directly to array
}
recordingOne 中的可访问元素来自 [0][99999]

关于c - 在 C 中传递非全局数组变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20385865/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com