将数组作为函数中的参数传递

时间:2016-08-18 18:51:16

标签: c arrays

我初始化了一个整数数组,我后来在函数中调用它。我注意到值已经改变了。我该怎么做才能阻止这种情况发生?

void check(int arr[5][6]){
    printf("%s", arr[0][0]);
}

int main(){
    int arr[5][6];
    arr[0][0] = 5;
    check(arr);
}

2 个答案:

答案 0 :(得分:3)

您未使用正确的格式说明符printf

要打印int,您需要使用%d格式说明符。您正在使用%s,它需要一个指向空终止字符串的指针。

printf("%d", arr[0][0]);

使用不正确的格式说明符会导致undefined behavior

答案 1 :(得分:0)

(0,0)中存储在数组中的值没有改变。甚至,如果你把它传递给一个函数。您的程序中出现的错误是您希望printf打印二维数组的int数据类型的元素。

由于array是数据类型int的二维数组。存储在arr[0][0]的元素将为int数据类型。

因此,您需要将程序更改为:

void check(int arr[5][6])
{
    printf("%d", arr[0][0]);
}

int main()
{
   int arr[5][6];
   arr[0][0] = 5;
   check(arr);
}

您发布的代码将具有未定义的行为。您粘贴的代码会发出警告。通过使用gcc编译代码,看看我得到的警告。

  

警告:格式'%s'需要类型为'char *'的参数,但参数2的类型为'int'[-Wformat =]            printf("%s",arr [0] [0]);

请记住:您永远不应忽视警告。

您使用了"%s"格式说明符,该说明符假定指向参数列表中的字符数组的指针。您只需将其更改为"%d"

c中有许多格式说明符。下面给出的很少 -

%c - For Character Variable
%d - For Integers
%f - For Double
%s - For Null-Terminated Character Array
%p - For Pointers (of void * type)