看你糾結得,C語言中,一個指針代表一個數(shù)據(jù)塊。無論是元數(shù)據(jù)(int ,float char ...),還是復雜數(shù)據(jù)(數(shù)組,結構體,鏈表...),都可以用指針指向它們。只需區(qū)別它們的引用規(guī)則即可。
創(chuàng)新互聯(lián)于2013年成立,先為陽春等服務建站,陽春等地企業(yè),進行企業(yè)商務咨詢服務。為陽春企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。
int a[3][4]; int **p; p=a;合法的 編譯完全沒有問題 指針角度來說二維數(shù)組名就是指針的指針,所以把二維數(shù)組名賦值給二維指針完全沒問題。
/*采用函數(shù)調(diào)用的方式編程實現(xiàn),將30名學生、3門課程的成績分別存放在31×4數(shù)組的前30×3位置,計算出每個學生 的總成績存放在該數(shù)組的最后一列的對應行上,計算出單科成績的平均分存放在最后一行的對應列上。
由scanf(%d, &i);可知道是輸入一個整型的數(shù)賦給i。
簡單的說吧,就是參數(shù)*p指向的內(nèi)容就是你帶入的參數(shù),這個算第一指向。但是在函數(shù)里,你有運行了p=b,也就是p重新指向了數(shù)組b的首地址,所以,賦值也就是給數(shù)組b進行賦值,跟a沒有關系了。
1、首先,你不應該返回局部變量的指針,因為局部變量在離開函數(shù)后就會被銷毀。如果你想這樣返回一個數(shù)組的話,你應該malloc出一個數(shù)組來返回。至于應該return什么,return (malloc出來的那個指針)就可以了。
2、在C語言中,無法直接返回一個數(shù)組,但是可以通過返回對應類型指針的方式,返回數(shù)組。在大多數(shù)情況下,一維數(shù)組和一維指針是可以通用的。比如,定義一個函數(shù),申請一定長度的整型動態(tài)數(shù)組,其長度用參數(shù)傳入,并將結果返回。
3、方法1:利用全局變量 分析:全局變量作為C語言的一個知識點,雖然我們都了解它的特點,但在實際教學過程中應用得并不是很多。
4、((double (*)[row])matrix);里的[row]是一個變量,而指向數(shù)組的指針 double (*matrix)[ROW]里的ROW只能使用常量,所以這里也有一個錯誤。
5、函數(shù)指針的數(shù)組定義方法:返回值類型( * 指針變量名[Number]) (形參列表)。
6、int *fn_pointer ();的意思完全不同了。fn_pointer 將是一個函數(shù)名, 其返回值為 int 類型的指針。2:函數(shù)指針變量 在C語言中規(guī)定,一個函數(shù)總是占用一段連續(xù)的內(nèi)存區(qū), 而函數(shù)名就是該函數(shù)所占內(nèi)存區(qū)的首地址。
這樣是沒錯的,p是一個指針類型的數(shù)據(jù),它指向的是三個int類型的數(shù)組,要用p指向的數(shù)據(jù)可以這樣(*p)[0],(*p)是解出p指向的數(shù)據(jù),也就是數(shù)組a,其實也就是數(shù)組a的首地址,然后就可以用下標[]取數(shù)據(jù)了。
int (*q)[3] 和 int *q[3] 是一個意思,聲明一個長度為3的指針數(shù)組。這里不存在結合的問題,“int *”說明q是指針類型的變量,后面的“[3]”說明q是數(shù)組,因此q是長度為3的指針數(shù)組。
數(shù)組指針定義int(*p)[n];()優(yōu)先級高,首先說明p是一個指針,指向一個整型的一維數(shù)組,這個一維數(shù)組的長度是n,也可以說是p的步長。也就是說執(zhí)行p+1時,p要跨過n個整型數(shù)據(jù)的長度。