<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
之前在學習二維陣列的時候感覺理解起來很簡單,所以理解一下就過去了,但是當自己真正的去用二維陣列陣列解決一些問題(特別是在函數呼叫二維陣列的過程中)才真正發現原來使用起來還是要去注意一些細節的。廢話不多說,直接上乾貨!
在函數中呼叫二維陣列的具體格式如下:
1、宣告:這是宣告的兩種格式,在這裡定義的是一個N*5的二維字元陣列,各位看官一定要注意,在宣告的過程中可是要將二維陣列中第二個長度引數進行標明的呀。
2、定義:和宣告的格式沒有什麼大的區別,只不過是要如果要採用第二種宣告方式的話要在定義時補充完整形參名
3、如果要去在函數中只使用二維陣列中的其中一個一維陣列時
我的個人做法是正常的在函數宣告中正常定義一個二維陣列,之後再在函數申明中額外新增一個整數引數去來限定在函數中使用二維陣列中具體哪一個一維陣列,例子如下:
所寫這個函數是為了去分別算出這個二維陣列中的每一個一維陣列的平均值,所以我在定義函數時加了一個n來表示我要算哪一個一維陣列的平均值。
4、在結構體中千萬不要去使用二維陣列!!!
當初我在寫結構體是想當然的去使用了二維陣列,結果。。。
如果在使用結構體的過程中需要用到類似於二維陣列的儲存資料的特性時,我們應當去選取用結構體陣列來解決相應的問題。結構體陣列相當一二維陣列的一維陣列,結構體中所定義的一些資訊精細化相當於二維陣列中一維陣列的資訊。
好了,這就是我這個小白中的小白在實際使用的過程中所出現的一些情況。
要想在函數中帶入一個二維陣列
前提首先我們要知道二維陣列在記憶體中是如何分佈的
假設定義一個二維陣列 arr[3][3];
記憶體中的是這樣儲存的:
圖解:
也就是說,二維陣列的記憶體關係是連續的,因此如果我們在函數中帶入一個陣列只需要陣列的第一排的第一個元素的地址和行數和列數三個條件
關鍵點是如何利用二維陣列的第一排首元素的地址去把整個陣列表示出來
假設:
陣列 int arr[3][3];
arr的值為第一排首元素地址
已知行列數為3,令int *p=arr;
可以用 *(p+i*3+j)表示第i排第j列的元素
因此函數只需要定義一個接收陣列第一排首地址元素的指標型別的形參即可
下面見完整程式碼:
#include<stdio.h> #include<windows.h> void Array_transpose(int *arr, int rank)//rank為陣列的列數 代表每排有多少個元素 { int i; int j; int temp;//temporary 臨時的 for (i = 0; i < rank; i++) { for (j = 0; j < i; j++) { //交換沿著對角線對稱的兩個數的值 //交換方法一 /* *(arr + j * rank + i)=*(arr + j * rank + i)+*(arr + i * rank + j); *(arr + i * rank + j)=*(arr + j * rank + i)-*(arr + i * rank + j); *(arr + j * rank + i)=*(arr + j * rank + i)-*(arr + i * rank + j); */ //交換方法二 *(arr + j * rank + i)=*(arr + j * rank + i)^*(arr + i * rank + j); *(arr + i * rank + j)=*(arr + j * rank + i)^*(arr + i * rank + j); *(arr + j * rank + i)=*(arr + j * rank + i)^*(arr + i * rank + j); //交換方法三 /* temp = *(arr + j * rank + i); *(arr + j * rank + i) = *(arr + i * rank + j); *(arr + i * rank + j) =temp;*/ } } } //配圖解: int main() { int a[5][5]= { 0,0,1,0,0, 0,0,1,0,0, 0,0,1,0,0, 0,0,1,0,0, 0,0,1,0,0 }; int i, j,s; Array_transpose(a, 5); for (i = 0; i < sizeof(a)/sizeof(a[0]); i++) { // sizeof(a)/sizeof(a[0])得陣列的有多少排 for (j = 0; j < sizeof(a[0])/ sizeof(a[0][0]); j++) // sizeof(a[0])/ sizeof(a[0][0])得到的是第一排的元素個數 { if (a[i][j]) printf("▇"); else { printf(" "); } } printf("n"); } system("pause"); return 0; }
程式碼實現的功能:
不使用Array_transpose()
原本輸出應該是這樣
使用Array_transpose()
轉置後
利用程式碼中的方法可以實現二維陣列的轉置,可以作為俄羅斯方塊的色塊變化方向的基礎
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45