- N +

二維數組指針作為函數參數 如何向函數傳遞二維數組

大家好,今天小編來為大家解答以下的問題,關于二維數組指針作為函數參數,如何向函數傳遞二維數組這個很多人還不知道,現在讓我們一起來看看吧!

C語言二維數組的參數是輸入值

c語言二維數組作為輸入輸出參數都可以,可以聲明為指針的指針

c語言二維數組做形參的疑惑

是等價的很多人以為“指向數組的指針”就是“指向指針的指針”,

C++中以數組指針為函數參數,為什么可以修改該數組指針的值

形參為指向數組的指針的時候指針的值是可以改變的,最開始的時候它指向數組的某個字符(這要看你傳的形參了),可以向后移動,也可以向前移動,

參數問題:

如果傳遞的一般的數,比如說int,double等等,實際上傳遞的是該值的拷貝,只能對拷貝的值進行操作,原來的數不受影響;

如果傳遞的是一個數組,那么實際傳遞的就是該數組,可以直接對該數組進行操作,也就是原來的數組(實際上是同一個數組)要改變;

形參為指向數組的指針的時候只是數組的首地址還是不變的,比如說

int

num[N];

int

*p

=

num;

GetInfo(num);//第一種情況

GetInfo(p+1);//第二種情況

在這兩個函數調用中第一種情況num是數組首地址不能改變,第二種情況p指向該數組可以改變,此時

p指向的是該數組的第二個數;

c語言指針數組的用法

一維數組指針

一維數組的指針是直接將一維數組的首地址賦予指針變量,之后通過指針變量的運算逐漸輸出一維數組中的各個元素的值。

例如:inta[20];

int*p;

因為數組名相當于一個指針指向的就是一維數組的首地址(例如a[0]),所以可以直接將數組名賦予指針變量(例如p=a),無需加取地址符&;也可以讓指針變量指向第一個元素的地址(例如p=&a[0]);即p=a與p=&a[0]是等價的,(應當要注意的是:p=a是將數組首元素的地址賦給指針變量,而非將數組a的各元素的值賦給指針變量)

如果一個指針變量p已經指向數組中的一個元素,則p+1指向數組中的下一個元素,p-1指向的是數組中的上一個元素。(注意:執行P+1或P-1時,并不是將P的值簡單的加1,而是加上一個數組元素所占用的字節數,例如:float型,每個元素占4個字節,所以p+1意味著使p的地址加4個字節,以便讓其指向下一個元素)

這里的a+i與p+i是等價的,也可以用數組名進行運算;

e

*(a+i)==*(p+i);

二維數組指針

令inta[2][3]={{1,2,3},{4,5,6}}

在二維數組中數組名指向數組的首元素,但是不是簡單的表示一個簡單的元素,而是由多個元素所組成的一維數組,因此數組名指的是二維數組首行(即下標為0的那一行)的首地址,a+1即表示下標為1的那一行元素,又因為數組名代表首元素的地址,所以a即代表二維數組中a[0][0]的值,a+1即a[1][0]的值。a[0]等價于*(a+0),a[1]等價于*(a+1),(a+1)+1的值即&a[1][1]。要想得到a[1][1]的值,就要再進行取值,即(a[1]+1)或*((a+1)+1)為a[1][1]的值。(注意:(a+i)與a[i]是等價的)

切記二維數組名是指向二維數組首行,而非指向二維數組a[0][0];

二維數組在指向行的指針前加*,就轉化為了指向列的指針,反之,在二維數組指向列的指針前加&,就轉化為了指向行的指針.(例如:&a[i]或a+i指向行.而a[i]或*(a+i)則指向列)

在定義時的int(*p)[4]的意思是指針變量p指向包含四個整型元素的一維數組,即在二維數組中一共有四行元素

二維數組名為什么不能直接賦值給二級指針

——為何可以int(*p)[n]=&a[i],而不能p=a[i]賦值(0<=i<m)?

p是什么?p首先是一個指針,存放了一個包含n個整型數據的數組(姑且叫他數組甲)的地址,這個時候我們可以認為數組甲,是一個有很多個類似于數組甲這樣的元素構成的數組(我叫他數組乙,很顯然,乙是個二維數組,數組的數組)的首元素,數組甲的地址就是數組乙的首元素的地址,所以p就可以當作數組乙的名字來賦值(二維數組名,也就是a)。

現在a是二維數組,先把a降維,看成是有m個元素組成的一維數組。那么a[0]是什么?是a這個現在被我暫時看成一維的數組的首元素。對首元素取地址,就是數組名。所以a==&a[0]。以此類推,a+i==&a[i]。那么a[0][0]又是什么?是對a取星以后的a[0]的首元素,也就是數組名,所以a[0]==&a[0][0],所以**a==a[0][0]==

*(*

(a+i)+j),只不過這里ij都是0。

所以,p這么一個指向數組的指針,可以賦給它a[0]的地址(a的首元素地址,也就是a),p=a=&a[0],以此類推,p+i=&a[i]。所以你的p=a[i]不對,a[i]是降維之后a的第i個元素同時又是個一維數組名,表示a[i][0]地址,只能賦給一個指向整型數據的指針。而你的p是個指向數組的指針,賦值符號左右端類型不同,這上哪能賦值?

你后面這p=&a[i]語法上是不錯,但是是強制讓p指針下移i個位置了,因為p+i=&a[i](假設你已經賦值p=&a[0]),你這個不就相當于p=p+i,也就相當于p+=i。也不是個特別好的寫法。

另外,如果你再定義一個int*q;然后q=a。這是可以的,a可以降維也可以不降維直接用。這時q=&a[0][0]

——在一維數組中卻只能用p=a,而不能用p=&a.

在一位數組里面,你就得這樣定義:int*p;這樣p里面存的是一個整型變量的“坑”的坑號。而一維數組a數組名不就是他自己首元素的坑的坑號?當然可以賦值p=a。

p=&a表示的是什么?a本來就是一個地址,你還要再對a取地址,應該還是它本身,但是含義不同。

非形參數組名都是指針常量,對指針常量取地址還是它本身(或者壓根取不了地址,因為常量可能沒地址)。

你也可以在編譯器里面打一下看看會不會報錯。

C++數組的引用做函數參數怎么寫

不對。int,char或者自定義的類可以通過值參數和引用參數兩種方式傳遞給函數,數組不行。

數組是兩種指針傳遞:

voidsort(int*a);//對于指針a來說是值傳遞,對于數組來說是指針傳遞

voidsort(inta[100]);//這種方法類似于引用,但實質上還是指針傳遞

關于二維數組指針作為函數參數和如何向函數傳遞二維數組的介紹到此就結束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關注本站。

返回列表
上一篇:
下一篇: