如何将数组中的数组传递给 C 中的函数?
How can I pass an array inside an array to a function in C?
下面是显示我正在尝试做的事情的基本思想的代码:
#include <stdio.h>
void thisFunc(int arr){
int firstValofBob = arr[0][0];
int secondValofBob = arr[0][1];
}
int main()
{
int bob[2] = {12, 13};
int jim[2] = {20, 50};
int arr[2] = {bob, jim};
thisFunc(arr);
}
我想将一个本身包含多个数组(bob[] 和 jim[])的数组 (arr[]) 传递给一个函数,这样我就可以访问 bob[] 和 jim[ 中的值].
我知道这里的代码不起作用,我可能需要以某种方式使用指针。关于执行此操作的好方法的建议?
要存储 bob 和 jim 的值,您需要创建一个数组来存储整数数组,然后将其传递给函数。我的实现是:
#include <stdio.h>
void thisFunc(int** arr){
int firstValofBob = arr[0][0];
int secondValofBob = arr[0][1];
}
int main()
{
int bob[2] = {12, 13};
int jim[2] = {20, 50};
int* arr[2] = {bob, jim};
thisFunc(arr);
}
将多维数组传递给函数时,函数必须知道数组所有维度的大小,最外层维度除外。否则,如果不知道这些大小,那么编译器就不知道如何计算数组元素的内存地址。
例如,如果在函数thisFunc
中写arr[3][5]
,那么编译器不需要知道外层数组的大小,但需要知道外层数组的大小内部数组。例如,如果它知道最内层数组的大小是 8
,那么它就会知道您要访问数组的第 30th 个元素(3*8+5==29
, 对应于基于0的索引中的索引29和基于1的索引中的索引30)。
在这种情况下,您似乎希望内部数组的大小为 2
,因此您应该更改行
void thisFunc(int arr){
至:
void thisFunc(int arr[][2]){
另一个问题是行
int arr[2] = {bob, jim};
将不起作用,原因有二:
数组的类型应该是 int arr[2][2]
而不是 int arr[2]
如果你想让它包含两个 sub-arrays 每个两个元素。
你不能像这样复制一个数组。但是,您可以使用函数 memcpy
.
复制数组
这里是一个使用memcpy
复制数组的例子:
int bob[2] = {12, 13};
int jim[2] = {20, 50};
int arr[2][2];
memcpy( arr[0], bob, sizeof arr[0] );
memcpy( arr[1], jim, sizeof arr[1] );
也可以直接初始化数组内容,比如这样:
int arr[2][2] = {
{ 12, 13 }, //bob
{ 20, 50 } //jim
};
这样,您就不需要额外的数组 bob
和 jim
,也不需要使用 memcpy
.
整个代码如下所示,假设内部数组的大小固定为 2 个元素:
#include <stdio.h>
#include <string.h>
void thisFunc( int arr[][2] )
{
int firstValOfBob = arr[0][0];
int secondValOfBob = arr[0][1];
printf( "firstValOfBob: %d\n", firstValOfBob );
printf( "secondValOfBob: %d\n", secondValOfBob );
}
int main()
{
int arr[2][2] = {
{ 12, 13 }, //bob
{ 20, 50 } //jim
};
thisFunc(arr);
}
这个程序有以下输出:
firstValOfBob: 12
secondValOfBob: 13
下面是显示我正在尝试做的事情的基本思想的代码:
#include <stdio.h>
void thisFunc(int arr){
int firstValofBob = arr[0][0];
int secondValofBob = arr[0][1];
}
int main()
{
int bob[2] = {12, 13};
int jim[2] = {20, 50};
int arr[2] = {bob, jim};
thisFunc(arr);
}
我想将一个本身包含多个数组(bob[] 和 jim[])的数组 (arr[]) 传递给一个函数,这样我就可以访问 bob[] 和 jim[ 中的值].
我知道这里的代码不起作用,我可能需要以某种方式使用指针。关于执行此操作的好方法的建议?
要存储 bob 和 jim 的值,您需要创建一个数组来存储整数数组,然后将其传递给函数。我的实现是:
#include <stdio.h>
void thisFunc(int** arr){
int firstValofBob = arr[0][0];
int secondValofBob = arr[0][1];
}
int main()
{
int bob[2] = {12, 13};
int jim[2] = {20, 50};
int* arr[2] = {bob, jim};
thisFunc(arr);
}
将多维数组传递给函数时,函数必须知道数组所有维度的大小,最外层维度除外。否则,如果不知道这些大小,那么编译器就不知道如何计算数组元素的内存地址。
例如,如果在函数thisFunc
中写arr[3][5]
,那么编译器不需要知道外层数组的大小,但需要知道外层数组的大小内部数组。例如,如果它知道最内层数组的大小是 8
,那么它就会知道您要访问数组的第 30th 个元素(3*8+5==29
, 对应于基于0的索引中的索引29和基于1的索引中的索引30)。
在这种情况下,您似乎希望内部数组的大小为 2
,因此您应该更改行
void thisFunc(int arr){
至:
void thisFunc(int arr[][2]){
另一个问题是行
int arr[2] = {bob, jim};
将不起作用,原因有二:
数组的类型应该是
int arr[2][2]
而不是int arr[2]
如果你想让它包含两个 sub-arrays 每个两个元素。你不能像这样复制一个数组。但是,您可以使用函数
复制数组memcpy
.
这里是一个使用memcpy
复制数组的例子:
int bob[2] = {12, 13};
int jim[2] = {20, 50};
int arr[2][2];
memcpy( arr[0], bob, sizeof arr[0] );
memcpy( arr[1], jim, sizeof arr[1] );
也可以直接初始化数组内容,比如这样:
int arr[2][2] = {
{ 12, 13 }, //bob
{ 20, 50 } //jim
};
这样,您就不需要额外的数组 bob
和 jim
,也不需要使用 memcpy
.
整个代码如下所示,假设内部数组的大小固定为 2 个元素:
#include <stdio.h>
#include <string.h>
void thisFunc( int arr[][2] )
{
int firstValOfBob = arr[0][0];
int secondValOfBob = arr[0][1];
printf( "firstValOfBob: %d\n", firstValOfBob );
printf( "secondValOfBob: %d\n", secondValOfBob );
}
int main()
{
int arr[2][2] = {
{ 12, 13 }, //bob
{ 20, 50 } //jim
};
thisFunc(arr);
}
这个程序有以下输出:
firstValOfBob: 12
secondValOfBob: 13