亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++ 二維數(shù)組傳參的四種方式

 更新時間:2024年04月18日 09:53:36   作者:虛擬筆記使  
C++的二維數(shù)組里面,通過用數(shù)組名傳參,傳過去后數(shù)組名會退化成一個一維數(shù)組指針,所以C++的函數(shù)參數(shù)不能像C語言一樣去寫,本文主要介紹了C++ 二維數(shù)組傳參的四種方式,具有一定的參考價值,感興趣的可以了解一下

最近剛開始刷劍指offer,剛做到第三題的時候,發(fā)現(xiàn)C++二維數(shù)組的傳參方式和C語言略有些不同,所以在這篇博客中,會列出C/C++常見的二維數(shù)組傳參方式。(本方式和代碼都是基于vs環(huán)境所編寫)

 一.C語言二維數(shù)組傳參方式

C語言二維數(shù)組傳參一般有三個方式。 

1.指針形式接收

#include<stdio.h>

void Print1(int* parr, int rows, int cols)//指針,行數(shù),列數(shù)
{
	for (int i = 0; i < rows; i++)
	{
		for (int j = 0; j < cols; j++)
		{
			printf("%2d ", *(parr + i * cols + j));
		}
		printf("\n");
	}
	printf("\n");
}

int main()
{
	int arr[][5] = { {1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20} };
	Print1(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]) / sizeof(arr[0][0]));
	return 0;
}

2. 數(shù)組形式接收

#include<stdio.h>

void Print2(int parr[][5], int rows, int cols)
{
	for (int i = 0; i < rows; i++)
	{
		for (int j = 0; j < cols; j++)
		{
			printf("%2d ", parr[i][j]);
		}
		printf("\n");
	}
	printf("\n");
}

int main()
{
	int arr[][5] = { {1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20} };
	Print2(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]) / sizeof(arr[0][0]));
	return 0;
}

3.數(shù)組指針形式接收

void Print3(int(*arr)[5], int rows, int cols)
{
	for (int i = 0; i < rows; i++)
	{
		for (int j = 0; j < cols; j++)
		{
			printf("%2d ", (*(arr + i))[j]);
		}
		printf("\n");
	}
	printf("\n");
}

int main()
{
	int arr[][5] = { {1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20} };
	Print3(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]) / sizeof(arr[0][0]));
	return 0;
}

一般來說,第一種更為常見,更加通用,因為第二、三種方法需要在函數(shù)中寫明二維數(shù)組的列數(shù),而一般情況下是不知道的。

二.C++二維數(shù)組傳參方式

當(dāng)我寫完C語言二維輸出傳參方式后,接著用C語言寫,發(fā)現(xiàn)C語言的第一種寫法不適用于C++,會直接報錯。

 原因:

在C語言里面,不管是一維數(shù)組還是二維數(shù)組,通過用數(shù)組名的傳參方式,傳過去后,數(shù)組名都會退化成一個指針指向第一個元素的指針。

而在C++的二維數(shù)組里面,通過用數(shù)組名傳參,傳過去后數(shù)組名會退化成一個一維數(shù)組指針,即這個指針是指向一個一維數(shù)組的。

如下圖所示:

所以C++的函數(shù)參數(shù)不能像C語言一樣去寫。 

1. 數(shù)組指針形式接收

#include<iostream>
using namespace std;

void Print1(int (*parr)[5], int rows, int cols)
{
	for (int i = 0; i < rows; i++)
	{
		for (int j = 0; j < cols; j++)
		{
			cout << (*(parr + i))[j] << " ";
		}
		cout << endl;
	}
	cout << endl;
}

int main()
{
	int arr[][5] = { {1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20} };
	Print1(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]) / sizeof(arr[0][0]));
	return 0;
}

2.指針形式接收

第一種方式參數(shù)要指明多少列,如果我們不想這樣寫可以嗎,答案是可以的,我們還是可以像C語言的第一種寫法一樣去寫,但是調(diào)用函數(shù)時的參數(shù)需要做出一些改變。 

傳arr改為傳arr[0][0]的地址。

#include<iostream>
using namespace std;

void Print2(int* parr, int rows, int cols)
{
	for (int i = 0; i < rows; i++)
	{
		for (int j = 0; j < cols; j++)
		{
			cout << *(parr + i * cols + j) << " ";
		}
		cout << endl;
	}
	cout << endl;
}

int main()
{
	int arr[][5] = { {1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20} };
    //函數(shù)第一個參數(shù)改為傳arr[0][0]的地址
	Print2(&arr[0][0], sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]) / sizeof(arr[0][0]));
	return 0;
}

3. 引用方式傳參

void Print3(int(&parr)[4][5],int rows,int cols)
{
	for (int i = 0; i < rows; i++)
	{
		for (int j = 0; j < cols; j++)
		{
			cout << parr[i][j] << " ";
		}
		cout << endl;
	}
	cout << endl;
}

int main()
{
	int arr[][5] = { {1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20} };
	Print3(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]) / sizeof(arr[0][0]));
	return 0;
}

這種引用方式傳參要指定行和列,所以也不好用,但是好在C++支持模板,所以可以使用模板來優(yōu)化。

4.引用+模板

template<size_t row, size_t col>
void Print4(int(&parr)[row][col])
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			cout << parr[i][j] << " ";
		}
		cout << endl;
	}
	cout << endl;
}

int main()
{
	int arr[][5] = { {1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20} };
	Print4(arr);
	return 0;
}

通過使用引用+模板的方式傳參,通過使用模板,編譯器會自動推導(dǎo)數(shù)組的行數(shù)和列數(shù)。

到此這篇關(guān)于C++ 二維數(shù)組傳參的四種方式的文章就介紹到這了,更多相關(guān)C++ 二維數(shù)組傳參內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言詳細(xì)講解注釋符號的使用

    C語言詳細(xì)講解注釋符號的使用

    C語言的注釋符是以“/*”開頭并以“*/”結(jié)尾的串。在“/*”和“*/”之間的即為注釋。程序編譯時,不對注釋作任何處理。注釋可出現(xiàn)在程序中的任何位置。注釋用來向用戶提示或解釋程序的意義。在調(diào)試程序中對暫不使用的語句也可用注釋符括起來,使翻譯跳過不作處理
    2022-04-04
  • C++運算符重載限制介紹

    C++運算符重載限制介紹

    這篇文章主要介紹了C++運算符重載限制,關(guān)于運算符的重載并不是隨心所欲的。C++給出了一些限制,從而保證了規(guī)范,以及程序運行的準(zhǔn)確性,下面來了解C++運算符重載限制的詳細(xì)內(nèi)容吧,需要的朋友也可以參考一下
    2022-01-01
  • C++文件上傳、下載工具

    C++文件上傳、下載工具

    這篇文章主要為大家詳細(xì)介紹了C++文件上傳、下載工具的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-05-05
  • C++和OpenCV實現(xiàn)圖像字符化效果

    C++和OpenCV實現(xiàn)圖像字符化效果

    圖像字符化的意思是將圖像以字符形式呈現(xiàn),具有一定的娛樂價值,許多開發(fā)人員通過python實現(xiàn)該功能,C++實現(xiàn)的代碼較少,因此本文通過C++和OpenCV實現(xiàn),給予C++開發(fā)人員一些可供借鑒的思路,需要的朋友可以參考下
    2022-06-06
  • C++面試之你知道有哪些可執(zhí)行體嗎

    C++面試之你知道有哪些可執(zhí)行體嗎

    可執(zhí)行體其實也叫可調(diào)用對象,這也是面試常常會考到的問題,這篇文章就來和大家詳細(xì)講講C++中的可執(zhí)行體,感興趣的小伙伴可以了解一下
    2023-06-06
  • C語言代碼實現(xiàn)俄羅斯方塊

    C語言代碼實現(xiàn)俄羅斯方塊

    這篇文章主要為大家詳細(xì)介紹了C語言代碼實現(xiàn)俄羅斯方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • C++找出字符串中出現(xiàn)最多的字符和次數(shù),時間復(fù)雜度小于O(n^2)

    C++找出字符串中出現(xiàn)最多的字符和次數(shù),時間復(fù)雜度小于O(n^2)

    今天小編就為大家分享一篇關(guān)于C++找出字符串中出現(xiàn)最多的字符和次數(shù),時間復(fù)雜度小于O(n^2),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • C++日期與時間 chrono庫介紹及使用教程

    C++日期與時間 chrono庫介紹及使用教程

    chrono庫是C++11中的一個標(biāo)準(zhǔn)庫,它提供了一系列與時間相關(guān)的類和函數(shù),用于表示和處理時間間隔,時鐘和時間點,C++20新增Calendar,這篇文章主要介紹了C++日期與時間 chrono庫介紹及使用,需要的朋友可以參考下
    2023-12-12
  • C++11中初始化列表initializer lists的使用方法

    C++11中初始化列表initializer lists的使用方法

    C++11引入了初始化列表來初始化變量和對象,自定義類型,如果想用初始化列表就要包含initializer_list頭文件
    2021-09-09
  • C語言報錯:Format String Vulnerability的多種解決方案

    C語言報錯:Format String Vulnerability的多種解決方案

    Format String Vulnerability(格式化字符串漏洞)是C語言中常見且嚴(yán)重的安全漏洞之一,它通常在程序使用不受信任的輸入作為格式化字符串時發(fā)生,本文將詳細(xì)介紹Format String Vulnerability的產(chǎn)生原因,提供多種解決方案,需要的朋友可以參考下
    2024-06-06

最新評論