本文目錄一覽:
- 1、C語言:行指針與列指針,探究探究!
- 2、關於c語言列指針
- 3、c語言中的列指針是指向元素的指針嗎,怎麼區別行指針與列指針
- 4、關於C語言的指針和列陣
- 5、C語言行指針和列指針
- 6、c語言指針變數中行指針和列指針是什麼?要如何使用?
C語言:行指針與列指針,探究探究!
1.行指針與列指針區別是否是+1上的不同,例如a[0]+1是指a[0][1]的地址
而a[0]+1是指a[1][0]的地址!除了上面還有其他的行指針與列指針表示方法嗎?只要有其功能就可!
——本質上不存在任何區別,n維數組的存儲空間都是連續的,只不靜態聲明數組時,編譯器幫你生成了根據下表訪問特定元素的代碼,如a[3][3],使用a[1][2]則編譯器幫你生成*(a+(3*1)+2)的指針訪問代碼,所以對於二維數組,設n,m分別為其一、二維,行指針:a+(n*行數),列指針:a+列數,在該位置的元素:a+(n*行數)+列數,不過用這種思維來理解數組欠妥,特別是維數多的時候。
2.**a,*a[0]是否別代表a[0][0]這個元素,是否就代表a可以當作指針,還是有其他的
區別!能講一點也好?
——不代表,a本身就是指針,而且是個值不能改變的指針,除非數組的元素是指針或多階指針
3.正如上面所說,a,a[0],a[0][0]是指同一個地址,除了上述+1區別,還有么?(可以從用法或其他方面說)
——轉變思維方法,數組是線性存儲,就線性地去理解它
4.數組a[3][3],為何這個不可以for(i=0;i9;i++)
scanf(“%d”,a++);
而
for(i=0;i9;i++)
scanf(“%d”,a+i);可以呢?
區別在哪?
——a是個不能改變值得指針,所以a++肯定是錯的
關於c語言列指針
int二維數組在內存中沒有所謂的列, 它是一段”連續”的內存空間,
正因為是連續的, 所以才要用p[i*n+j]來定址
c語言中的列指針是指向元素的指針嗎,怎麼區別行指針與列指針
二維數組的數組名a和a+1、a+2是行指針,它指向的元素是一個包含4個元素的一維數組,而*a、*(a+1)、*(a+2)是列指針,即指向元素的指針,相當於一維數組中指向特定元素的指針。*(*(a+1)+2)是先豎著走一行,再橫著走兩行,相當於a[1][2]。a[1][0]就是a[1][0]的地址,相當於*(a+1),是一個列指針。
關於C語言的指針和列陣
標準的答案!這個問題可以這麼來解釋:首先,列陣只是一個人為的表示,在計算機中,列陣實際是按照地址,順序進行分配的;它是一段順序的存儲空間,按照地址由高到低排列,或者由低到高排列。而C語言中的指針,它其實也是一個地址,準確的說:它是地址的志向。指針之所以會和列陣聯繫在一起,是因為通過指針,能夠很方便的訪問到列陣中的每一個元素,而且這種訪問的效率通常是比較高的,也是比較簡單和容易實現的。至於a[0]和p,a是數組名,代表該數組的首地址,只不過它是一個指針常量,它不能自加自減,例如:a++,++a都是錯誤的;而p是一個指針變數,它可以自加自減;這二者是有區別的。
C語言行指針和列指針
在任何時候都不能定址, 它是用來取地址的.
p[i]在任何時候都等價於*(p+i)
p[i][j] (其中p是int*[x]類型的)在任何時候都等價於*(*(i*x)+j)
x是一個變數.
int a[10][20]
這裡x = 20
int a[20][10]
這裡x = 10
C語言沒有什麼行指針, 列指針.
一維數組就是一級指針,
二維數組是特殊的二級指針,
以此類推……
c語言指針變數中行指針和列指針是什麼?要如何使用?
對於一個二維數組:
int a[3][5];
a即是它的行指針,a+0表示第0行的地址,a+1表示第1行地址…
a[row]+col即列指針,列指針經過一次解引用就可以轉化成二維數組中實際的值,列指針也是指向非常量的常量指針。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/239273.html