将int指针传递给函数以在C

时间:2016-05-16 23:54:17

标签: 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'),但是当我尝试通过该函数执行它时,它很难过。我怀疑我在滥用指针,但是我不确定。

非常感谢帮助。

感谢。

编辑:看了前两条评论后,我对自己感到羞愧。谢谢大家。哇,哇。

3 个答案:

答案 0 :(得分:1)

您应该将功能更改为

char

当您将int传递给它时。正如@Malife指出的那样,您应该使用-Wall启用编译器警告,以便获得正确的消息。 (可选)使用-Werror将所有警告设置为错误。

intint有不同的尺寸,char要大得多。从输出中可以看到4倍大。在将值{ "app_id": "", "proxies": [ { path: "/api", "proxyUrl": "http://localhost:3000" } ] }视为$authProvider时,您将以部分方式重复分配$authProvider.twitter({ url: '/api/user/twitter' });个数字的内存。

答案 1 :(得分:0)

printarr应该期待一个int数组,而不是char数组,所以应该是

 void printarr(int *ptr, int l)

在main中,int * ptr = arr;不使用或不需要。

您可能还想在要打印的数组的每个值之间放置一个空格或换行符:

void printarr(char *ptr, int l) {

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

答案 2 :(得分:0)

我认为问题是你在&#34; printarr&#34;中传递一个字符指针。事实上,当你通过&#34; ptr&#34;你有这种情况:00000011 00000000 00000000 00000000 00000100 ....一个char有8位,一个int 32位,并且Ram通常是Little Endian的字节顺序。然后你调用一个传递int的printf,并将字节扩展到32位,这样你打印:3 0 0 0 4.在主&#34; ptr&#34;是一个int,所以你打印int,在这种情况下3 4 5 6 7.你必须更改char * ptr - &gt; int * ptr in&#34; printarr&#34;