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

标签 c arrays pointers long-integer unsigned

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/

相关文章:

c - 编译 C 程序时如何解决 Clang 中的链接器问题?

c - 在系统启动时在 Yocto MiniDisplay 上打印

c - 运行代码恰好一秒钟

c++ - 为什么将 "pointer to pointer to non-const"转换为 "pointer to pointer to const"是不合法的

c - 如何在 C 中取消引用 void*?

c - 同时写入和读取数组

c - 在 C 中,为什么多重声明对于全局变量可以正常工作,但对于局部变量却不行?

php - 将 MySQL 结果填充到网格中

c# - 将元素从 int 数组添加到 int hashset

c - 错误返回不兼容指针不兼容 C