1. 程式人生 > >二維陣列作為形參--傳值的3三種方式

二維陣列作為形參--傳值的3三種方式

二維陣列作為形參傳值的3種方式

在記憶體中二維陣列是按照行主序進行儲存的,從記憶體的角度上看,二維陣列本質就是一個一維陣列。如果把二維陣列的每一行看成一個整體,即看成一個數組中的一個元素,那麼整個二維陣列就是一個一維陣列。而二維陣列的名字代表二維陣列第0行的首地址(注意它是代表一行元素的首地址,而不是第0行第0列元素的首地址,雖然是相等的,但不能這麼理解,所以在沒有強制轉換的情況下,二維資料要麼通過行指標進行引數傳遞,要麼通過二維指標進行引數傳遞

/*傳二維陣列*/

//第1種方式:傳陣列,第二維必須標明
/*void display(int arr[][4])*/
void display1(int arr[][4
],const int irows) { for (int i=0;i<irows;++i) { for(int j=0;j<4;++j) { cout<<arr[i][j]<<" "; //可以採用parr[i][j] } cout<<endl; } cout<<endl; } //第2種方式:一重指標,傳陣列指標,第二維必須標明 /*void display(int (*parr)[4])*/ void display2(int
(*parr)[4],const int irows) { for (int i=0;i<irows;++i) { for(int j=0;j<4;++j) { cout<<parr[i][j]<<" "; //可以採用parr[i][j] } cout<<endl; } cout<<endl; } //注意:parr[i]等價於*(parr+i),一維陣列和二維陣列都適用 //第3.1種方式: void display3(int
*arr,const int irows,const int icols) { for(int i=0;i<irows;++i) { for(int j=0;j<icols;++j) { cout<<*(arr+i*icols+j)<<" "; //注意:(arr+i*icols+j),不是(arr+i*irows+j) } cout<<endl; } cout<<endl; } //呼叫方式:display3((int*)arr,irows,icols); 即將二維陣列強轉成一維使用(形參部分強轉) //第3.2種方式:使用二維指標傳值 void display3(int **arr, int rows, int cols) { for (int i=0;i<rows;++i) { for(int j=0;j<cols;++j) { cout<< *((int*)arr + cols*i + j) <<endl; } cout<<endl; } } //同樣需要進行強制轉換使用(函式內部強轉)

相關推薦

陣列作為--3方式

二維陣列作為形參傳值的3種方式 在記憶體中二維陣列是按照行主序進行儲存的,從記憶體的角度上看,二維陣列本質就是一個一維陣列。如果把二維陣列的每一行看成一個整體,即看成一個數組中的一個元素,那麼整個二維陣列就是一個一維陣列。而二維陣列的名字代表二維陣列第0行的首

C語言的那些事--陣列作為

#include <stdio.h> #include <stdint.h> void fun(uint8_t (*buf)[4],uint8_t line,uint8_t r

陣列作為如何呼叫

         在做Leetcode第  題:有效的數獨中,遇到這樣一個問題:題目給出這樣一個函式  bool isValidSudoku(char** board, int boardRowSize, int boardColSize),很顯然三個形參分別是二維陣列的陣列

定義接受陣列作為時,定義時可以省略陣列的行數,但不能省略列數。

可以用二維陣列名作為實參或者形參,在被呼叫函式中對形引數組定義時可以指定所有維數的大小,也可以省略第一維的大小說明,如:     void Func(int array[3][10]);     void Func(int array[][10]);     二者都是合

細談 C++ 返回方式:按返回、按常量引用返回以及按引用返回

一、引言 停滯了很久,最近又開始細細品味起《Data Structure And Algorithm Analysis In C++》這本書了。這本書的第一章即為非常好的 C++11 統領介紹的教材範文,可能對於 C++11 新手來說,作者這樣短篇幅的介紹或許有些蒼白晦澀,但是對於我

【vue】vue元件方式

前言 vue的元件傳值分為三種方式:父傳子、子傳父、非父子元件傳值 引用官網的一句話:父子元件的關係可以總結為 prop 向下傳遞,事件向上傳遞 父元件通過 prop 給子元件下發資料,子元件通過事件給父元件傳送訊息,如下圖所示:   下面我們就開始用程式碼(一言不

Java 多執行緒方式,以及另類的第四方式

現在博主的需求是:有可能在同一個執行緒類執行不一樣的程式。上邊兩個紅框中的cron4j排程器使用的是一個,根據引數不同來執行的。如果我點選後邊的手動執行一次,按照我上邊給出的java程式碼是無法實現的。看下邊的新的程式碼: (adsbygoogle = window.adsbygoo

C++ char* 的若干問題之:char*作為能否影響實

有如下方法: int readFeat(char* param) { param = (char *) malloc(10 * sizeof(char)); param = "test char"; param = '\0'; return 0; } 在該方法中,

C++中陣列作為時,實際的是指標

傳陣列時,實際上是建立了臨時的指標變數,指向傳進去的那個陣列。在函式中改變形引數組(臨時指標變數)的指向是可以的,只不過這樣做不會改變原來的陣列 //例子說明陣列做形參時,實際上是用一個臨時指標變數做形參,指向傳進去的陣列首地址。實際的陣列是常指標,不能改變它的值。 #i

陣列動態申請與

今天在寫八皇后時遇到了一些小問題,下面整理一下。二維陣列初始化用二階指標來申請:#include <stdio.h> #include <malloc.h> /*     這裡只做申請 */ void makeDoubleArray(int row,

JAVA方法中陣列作為的是引用

之前一直以為傳陣列和基本型別都是傳的值,今天做題時發現傳陣列傳的其實是引用。 public class Tests { public static void main(String[]

找出陣列中最大的

題目: 找出二維陣列中最大的值 #include <stdio.h> int main() {   int arr[3][4]={34,34,54,2,5,23,8,3,1,6,25,6},t,i,j;   t=arr[0][0];   for(i=0;i<3;i++)

陣列作為函式引數

https://www.cnblogs.com/alantu2018/p/8465894.html   1、二維陣列的概念   在C語言中,二維陣列實際上是一種特殊的一維陣列,它的每個元素也是一個一維陣列。因此,二維陣列下標形式正確寫法如下:int arrays[i][j]。陣

JAVA——自定義類物件的一陣列陣列的定義以及賦的注意事項

今天用JAVA模擬了一次保皇問題,真的是被噁心到了,但同時發現了自己對於自定義類物件的陣列,又忘了,在這裡進行總結複習一下。再次膜拜CSDN大佬寫的部落格,幫助大的一批。ORZ; 一、自定義類物件一維陣列 在整理之前,先貼出一段程式碼: package ceshi; import

陣列根據指定的鍵排序

function array_sort($array,$keys,$type='asc'){ if(!isset($array) || !is_array($array) || empty($array)){ return ''; } if(!isse

在函式中以陣列作為

說明: 陣列的兩個特殊性質對我們定義和使用作用在陣列上的函式有影響,這兩個性質分別是: 不允許拷貝陣列; 使用陣列時通常會將其轉換成指標。 因為不能拷貝陣列,所以我們無法以值傳遞的方式使用陣列引數。 因為陣列會被轉換成指標,所以當我們為函式傳遞一個

C++陣列作為傳遞給函式

以下三種形式等價 void function(const int *arg); void function(const int arg[]); void function(const int arg[

php 對陣列的某個鍵的進行排序

有時候我們需要對二維陣列的某個鍵的值進行排序,這裡就是討論這個問題。我們可以使用array_multisort()這個函式。array_multisort() 函式對多個數組或多維陣列進行排序。 引數中的陣列被當成一個表的列並以行來進行排序 - 這類似 SQL 的 OR

陣列作為退化為指標

一個小程式進行驗證 #include<stdio.h> void Sizeof(int arr[]) { printf("%d\n",sizeof(arr)); } in

陣列作為函式引數傳遞(C++)

有時候我們也許會不明白為什麼C++中的陣列宣告的時候下標是需要一個常數,而不能是一個變數吶?也許STL模板庫中的向量可以解決變數作為下標的陣列宣告方式,為了節約一些記憶體或者是提高一些效能,也為了功能不重複,故而陣列中的下標採取了常量的方式。 int a[