tft每日頭條

 > 圖文

 > c語言數組怎麼賦值給另一個數組

c語言數組怎麼賦值給另一個數組

圖文 更新时间:2025-02-12 01:33:51

c語言數組怎麼賦值給另一個數組?如果隻傳遞數組,不數組長度,如何利用函數來處理數組?,今天小編就來說說關于c語言數組怎麼賦值給另一個數組?下面更多詳細答案一起來看看吧!

c語言數組怎麼賦值給另一個數組(C不傳遞數組長度)1

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每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved