c語言數組怎麼賦值給另一個數組?如果隻傳遞數組,不數組長度,如何利用函數來處理數組?,今天小編就來說說關于c語言數組怎麼賦值給另一個數組?下面更多詳細答案一起來看看吧!
如果隻傳遞數組,不數組長度,如何利用函數來處理數組?
#include <iostream>
int sum(int arr[]); // how to implement
main()
{
int arr[5] = {1,2,3,4,5};
std::cout<<sum(arr);
getchar();
}
int sum(int arr[])
{
//
return 0;
}
一點前置知識:
對于一維數組:
int arr[5] = {1,2,3,4,5};
// 指向數組首元素的指針:
int *ape = arr; // arr退化為指向數組首元素的指針
// 指向數組整體的指針:
int (*ap)[5] = &arr;
對于二維數組:
int arr[3] [4]= {1,2,3,4,5,6,7,8,9,10,11,12};
// 指向數組首元素的指針:
int (*ape)[4] = arr; // arr退化為指向數組首元素的指針
// 指向數組整體的指針:
int (*ap)[3][4] = &arr;
很明顯,對于指向數組首元素的指針和指向數組整體的指針,指針的目标類型是不同的。
對于指向數組首元素的指針,其數組元素的類型相對于數組類型來說,喪失了第一維的長度信息。
對于指向整體數組的指針而言,保留了第一維的長度信息。
不同類型的指針,當指針偏移(指針加減一個整型值)時,其偏移的字節數不同。
對于指向數組首元素的指針ape,ape 1表示偏移sizeof(int)*4*1個字節;
對于指向數組整體的指針ap,ap 1表示偏移sizeof(int*3*4*1個字節。
如果指定數組長度,代碼很簡單:
#include <iostream>
int sum(int arr[],int size); // 指向數組首元素的指針 元素長度
main()
{
int arr[5] = {1,2,3,4,5};
std::cout<<sum(arr,5);
getchar();
}
int sum(int arr[],int size)
{
int s=0;
for(int i=0;i<size;i )
s = arr[i];
return s;
}
如何顯式指定數組長度,并傳遞指向數組整體的指針,代碼也很簡單:
#include <iostream>
int sum(int (*arr)[5]); // 指向數組首元素的指針 元素長度
main()
{
int arr[5] = {1,2,3,4,5};
std::cout<<sum(&arr);
getchar();
}
int sum(int (*arr)[5])
{
int s=0;
for(int i=0;i<5;i )
s = (*arr)[i];
return s;
}
可惜的是,這個函數隻能處理數組長度為5的數組。
如何支持不同長度數組?
我們知道,模闆在編譯階段展開,所以可以傳遞一個常量模闆參數:
#include <iostream>
template<const int size>
int sum(int (*arr)[size]); // 指向數組首元素的指針 元素長度
int main()
{
int arr[5] = {1,2,3,4,5};
std::cout<<sum(&arr);
return 0;
}
template<const int size>
int sum(int (*arr)[size])
{
int s=0;
for(int i=0;i<size;i )
s = (*arr)[i];
return s;
}
使用引用更簡潔:
#include <iostream>
template<const int size>
int sum(int (&arr)[size]); // 指向數組首元素的指針 元素長度
main()
{
int arr[5] = {1,2,3,4,5};
std::cout<<sum(arr);
getchar();
}
template<const int size>
int sum(int (&arr)[size])
{
int s=0;
for(int i=0;i<size;i )
s = arr[i];
return s;
}
for循環使用range for更簡潔:
#include <iostream>
template<const int size>
int sum(int (&arr)[size]); // 指向數組首元素的指針 元素長度
main()
{
int arr[5] = {1,2,3,4,5};
std::cout<<sum(arr);
getchar();
}
template<const int size>
int sum(int (&arr)[size])
{
int s=0;
for(int i:arr)
s = arr[i];
return s;
}
-End-
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!