这是我的第一篇文章,所以请耐心等待。离开学校一段时间后,我又重新开始用 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
将所有警告变为错误.
char
和 int
具有不同的大小,int
更大。从输出中可以看出,大了 4 倍。当将值视为 char
时,您正在迭代以部分方式分配 int
数字的内存。
关于c - 将 int 指针传递给函数以在 C 中打印该数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37264995/