c - 将 int 指针传递给函数以在 C 中打印该数组

标签 c arrays function pointers

这是我的第一篇文章,所以请耐心等待。离开学校一段时间后,我又重新开始用 C 语言写作。我试图将一个整数数组传递到一个函数中,该函数将在同一行上打印整个数组(作为更大工作的一部分)。我的简化代码如下:

// main.c
#include <stdio.h>

int main(void) {

    int arr[] = {3,4,5,6,7};
    int *ptr = arr;
    int l = 5;

    printarr(arr,l);
    return 0;
}

还有

// function printarr
#include <stdio.h>

void printarr(char *ptr, int l) {

    int k = 0;
    for (k = 0; k < l; ++k) {
        printf("%d", ptr[k]);
    }
}

编译并运行main.c后,我得到的输出是:

30004

我觉得我一直在用头撞墙试图解决一个简单的问题。当我在 main 中迭代并打印数组时,我得到了我期望的输出('34567'),但是当我尝试通过函数执行此操作时,结果很糟糕。我怀疑我滥用了指针,但我不确定。

感谢帮助。

谢谢。

编辑:看了前两条评论,我完全为自己感到羞耻。谢谢你们。哇,只是哇。

最佳答案

你应该将你的函数更改为

void printarr(int *ptr, int l)

当您将 int * 传递给它时。正如 @Malife 所指出的,您应该使用 -Wall 启用编译器警告。 ,这样您就会收到正确的消息。可以选择使用 -Werror 将所有警告变为错误.

charint 具有不同的大小,int 更大。从输出中可以看出,大了 4 倍。当将值视为 char 时,您正在迭代以部分方式分配 int 数字的内存。

关于c - 将 int 指针传递给函数以在 C 中打印该数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37264995/

相关文章:

C - 保存到文件崩溃

c - 在 C 中使用可变长度数组初始化结构

php - 查询中的准备语句结果

javascript - 检索唯一元素的索引数

function - 设计师为什么要在clojure里做vector、map、set函数?

c++ - 捕获函数名称

javascript - 相同功能按钮,但分别使用 Vue 和 Vuetify

c++ - 结构的内存大小

c - strsep() 以 '\n' 作为 C 中的分隔符

c++ - 将字符串元素分配给结构数组中的结构