1樓:匿名使用者
在轉置函式中,宣告瞭轉置後的指標變數,但沒有給指標變數分配地址。
可以使用下面的方法:
#include
int **transposition(int p[3])for (int i = 0;i<2;++i)for (int j = 0;j<3;++j)b[j][i] = p[i][j];
return b;
}void main()
執行結果如下:
2樓:矮子根
試試這個吧。
//將一個二維陣列行和列元素互換,存到另一個二維陣列中。
#include
void main()
,};int b[3][2],i,j;
printf("array a:\n");
for (i=0;i<=1;i++)
{ for (j=0;j<=2;j++){ printf("%5d", a[i][j]);
b[j][i]=a[i][j];
printf("\n" );
printf("array b:\n");
for (i=0;i<=2;i++)
{ for(j=0;j<=1;j++)printf("%5d",b[i][j]);
printf (("\n"),("\n"));
如何指標指向一個二維陣列。。
3樓:
用指向陣列的指標吧,還要看二維陣列的具體情況。你這裡如果要指向b,那那就宣告一個int (*p)[100]=b;就可以了。
4樓:陽陽百寶箱
指標名=陣列名;把陣列首地址賦值給指標;
指標名=&陣列元素;把陣列元素的地址賦值給指標
c語言中如何通過二級指標來操作二維陣列
5樓:灩麗
1、首先我們開啟電腦裡的c語言軟體,新建一個工程和.c檔案,輸入標頭檔案和主函式。
2、然後我們輸入圖示**初始化陣列,定義變數型別。
3、然後我們輸入圖示**用for語句實現陣列的訪問。
4、然後我們輸入圖示**進行輸出。
5、然後我們輸入圖示**編譯、執行,即可通過二級指標來操作二維陣列。
6樓:小宇宙
倘若此時有一個二級指標
檔案中可以編譯通過,但會給出警告。若是在
.cpp檔案中則不會編譯通過!我相信很多人的第一反應是加上強制型別轉換:
q=(int**)a;
根據我上面講述的:q可視為int**型別,且是int*變數的地址型別變數!對q (指標變數)的引用,得到是的其(即q)記憶體單元的資料,即int*變數的地址,*q則是獲取q所指向的int*變數型別地址的內容,相當於int* q變數q的直接引用,得到是int型別變數的地址。
q所佔的記憶體為4byte,*q所佔的記憶體也為4byte
。一切都清楚了。
現在來分析二維陣列a的資料型別。我們知道指標與陣列的聯絡的常見具體應用有兩種:一種是“陣列指標”:形如(*ptr);另外一種是“指標陣列”:形如*ptr。
。來分析一下“陣列指標”(*ptr)[size],
ptr所指的物件是有size個某種資料型別值的陣列。而ptr本身又是一級指標,一級指標又等價於一維陣列。
a[2][3]的低維是一個維度為3的一維陣列。高維是一個維度為2的一維陣列,不難理解,正如前面所述:二維陣列的每個元素是一個一維陣列,相當於一維陣列的兩次巢狀。
比如變數a[0]是一個維度為3的一維陣列
,a[1]亦是一樣。這樣一來,高維的那一部分可視為一個指標!
一個膽大的設想出來了:二維陣列本質上就等同於“陣列指標”!
cout< 輸出結果為:int (*)[3](換行)int (*)[3]兩者完全相同,與設想一致! 現在回到問題上來, q=(int**)a; 強制轉換成功,但卻不可能正確執行! 原因已浮出水面:q這個地址單元存放的是int*型別的“指標變數”的地址,而二維陣列a骨子裡卻是一個“陣列指標”。兩者完全是“八竿子打不著”! 想一想它們的記憶體分佈情況,前者(地址)所指向的記憶體大小恆為4byte ,後者(地址)所指向的記憶體大小是隨著你定義的陣列維數而不斷變化的!即使通過強制型別轉換成功,q的記憶體值就是a所代表的地址,但這個地址僅僅是一個地址,而q的記憶體值不僅要求是一個地址,而且還必須是一個“指標變數”的地址!只有這樣通過*q(前面說過: *q則是獲取q所指向的int*變數型別地址的內容,即一個int變數的地址)才能操作一個普通變數的地址,否則就是用“*”來操作普通變數,想一下 int x=250;*x 又是“陣列指標”?這裡有必要強調一下:我是從它們的儲存映象上來講的,但編譯器的語義實現上兩者是絕不能劃等號的! 你能夠將一個二維陣列賦值給一個一維陣列嗎?顯然是不行的!因此我們這樣想: 語句q=(int**)a; 是將一個一維陣列(等價於一級指標)賦給一個二級指標(要通過“&”賦一級指標的地址才行) ,地球人都知道這是行不通的!雖然乍聽起來還蠻合理的,其實此般理解無異於穿鑿附會。剛才解釋過,兩者 的語義迥異!不過,這樣理解似乎更能深刻且方便地知道那樣做錯在**了,呵呵。 7樓:風若遠去何人留 通過二級指標去訪問二維陣列需要先給二級指標分配等同於二維陣列行數的一維陣列指標,然後把二維陣列的每行首地址賦值給對應位置的一維指標上。之後就可以通過二維指標直接訪問了。 參考**如下,可以看具體註釋輔助理解。 #include //輸入輸出標頭檔案。 #include //本程式需要用到malloc/free函式,引用該標頭檔案。 int main() ; //定義二維陣列a,並賦值從1-12. int ** p = null;//定義二維指標。 int i, j; p = (int **)malloc(sizeof(int *) *3);//要訪問的陣列有三行,所以申請三個一維指標變數。 for(i = 0; i < 3; i ++) for(i = 0; i < 3; i ++) free(p);//釋放申請的記憶體。 return 0; }用二維指標訪問二維陣列多用於函式呼叫。 對於一維陣列,如果函式引數為一維指標可以直接用陣列名當做函式引數。但是如果函式引數為二維指標,直接用二維陣列名做引數會出現訪問出錯,是因為二維指標和二維陣列的訪問方式不同造成的,需要如示例**中做轉換。 另外一種常用的方法是利用二維陣列的記憶體連續性將二維陣列轉為一維陣列處理,與本題無關,不做更多描述。 要回答你的這個問題,不妨先根據你的問題先編寫一段小的示例程式 include include using namespace std int a 3 4 int main 這段示例程式在我本地上執行的結果為 a i 0 4214816 a i 4214816 a i 4214816 a i 0 42... 假設a是乙個二維陣列,則一 a是第乙個一維陣列名,陣列名 就是該陣列的 首位址!二 a 0 和 a都表示這個一維陣列第乙個元素的內容 這句話有問題,應該是 都表示這個 二維陣列 第乙個元素的內容!三 a和a好像不等價啊?關於陣列名和 陣列名書上有明確的介紹與說明 a a a 0 a 0 這是規定!細... 無論幾維陣列,只要指標p已經指向了某個元素,那麼p i 就是第i個元素值 i從0起算 當然i有限定的取值範圍。p i 指的是 p i p i 就是指向第i行。p是指向陣列中某個特定元素的指標 那麼p i 與 p i p 有什麼區別?請詳細說明下 謝謝 p i 表示第i個元素的指標,其值為第i個元素的...c語言 二維陣列指標中的和,C語言 二維陣列指標中的 和
C語言指標與二維陣列求解,c語言中二維陣列的指標如何表示
c程式中如果p指向某二維陣列的某個元素那麼pi是