欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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;
}

一般來(lái)說(shuō),第一種更為常見(jiàn),更加通用,因?yàn)榈诙?、三種方法需要在函數(shù)中寫(xiě)明二維數(shù)組的列數(shù),而一般情況下是不知道的。

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

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

 原因:

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

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

如下圖所示:

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

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ù)要指明多少列,如果我們不想這樣寫(xiě)可以嗎,答案是可以的,我們還是可以像C語(yǔ)言的第一種寫(xiě)法一樣去寫(xiě),但是調(diào)用函數(shù)時(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ù)第一個(gè)參數(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++支持模板,所以可以使用模板來(lái)優(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;
}

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

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

相關(guān)文章

  • C語(yǔ)言詳細(xì)講解注釋符號(hào)的使用

    C語(yǔ)言詳細(xì)講解注釋符號(hào)的使用

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

    C++運(yùn)算符重載限制介紹

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

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

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

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

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

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

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

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

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

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

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

    C++日期與時(shí)間 chrono庫(kù)介紹及使用教程

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

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

    C++11引入了初始化列表來(lái)初始化變量和對(duì)象,自定義類型,如果想用初始化列表就要包含initializer_list頭文件
    2021-09-09
  • C語(yǔ)言報(bào)錯(cuò):Format String Vulnerability的多種解決方案

    C語(yǔ)言報(bào)錯(cuò):Format String Vulnerability的多種解決方案

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

最新評(píng)論