當前位置:首頁 » 編程語言 » 行指針c語言

行指針c語言

發布時間: 2023-01-02 17:06:49

『壹』 c語言指針變數中行指針和列指針是什麼要如何使用

對於一個二維數組:
int a[3][5];

a即是它的行指針,a+0表示第0行的地址,a+1表示第1行地址…
a[row]+col即列指針,列指針經過一次解引用就可以轉化成二維數組中實際的值,列指針也是指向非常量的常量指針。

『貳』 c語言 什麼是行指針 求大神詳細解釋。

我們在使用c語言進行編寫程序的時候,就一定會使用上指針,指針的操作是編寫程序的一個點。
如何更好的使用指針,將是我們進行更好的書寫程序的關鍵。
這里,小編就分享一下自己在使用c語言編程過程中,對於指針的理解:
1:指針是一個地址,指向的是個類型:
我們知道,c語言中的類型有int,char,bool(這個不常用),一般我們使用int,char就可以滿足一般的類型需求的,如果對於變數的長度過大,就是用long ,float,double,關於各個類型使用的的長度問題,可以使用sizeof(int)或者sizeof(long)來查看各個類型,在系統中的小。
而指針就是一個8個位元組(64系統)。

2:指針指向的是地址,地址指向的是內容:
我們需要一個變數,來存儲地址,這個變數的值是地址,但是我們可以通過修改變數的值,來不斷的改變地址,但是,我們如果需要改變該個地址的值的話,就需要,對地址的值進行修改,而不改變地址。
int a = 10;
int *p ;
p = &a;
*p =11;
a=?
這里我們看到,p 是一個變數,我們使用p來存儲變數a的地址,這是,我們使用*p對於這個變數進行賦值,那麼a的值最後,是多少呢,結果是11,因為我們使用*p賦值,就相當於a=11,賦值效果一樣的。
3:指針的指針,是面對於指針的變數:
我們說,指針的指針的時候,就有點不清楚了,到底怎麼區分指針和指針的指針呢。
char *p;
char **pr;
pr = &p;
我們這樣看就清楚了一點,char *(*pr); *pr是一個存儲的值為指針的變數,pr就是存儲上個變數地址的變數。整合起來就是,pr是一個存儲的值為指針的地址的變數。
這樣,我們就基本,對於指針有一個直接的了解了。

『叄』 C語言的行指針與元素指針有什麼區別

先舉個例子吧,先定義一個二維數組int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}
數組名a就是一個行指針,a[0]就是一個列指針;
就拿這個例子說吧,a和a[0]雖然地址相同,可是指針指向類型卻不同,對指針進行+1運算,顯然得到的結果是不同的,因此a(行指針)+1中的"1」代表一行中全部元素所佔的位元組數,而a[0]+1,這里的1則是一個元素所佔的位元組數,是兩個不同的概念。
為了說明這個容易搞混的問題,可以用軍訓中排隊點名來說明。班長逐個檢查本班戰士是否在隊列中,班長每移動一步,走過一個戰士,而排長點名只檢查本排各各班是否到齊。排長只從第0班的起始位置走到第1個班的起始位置,看來只走了一步,但實際上他跳過了10個戰士,這相當於a+1,班長面對的戰士,排長面對的是班,班長相當對列指針,排長相當於行指針。
為了找到某個班內的某一個戰士,必須給出兩個參數

『肆』 C語言中的「行指針」與「元素指針」有什麼區別

int a[4]={1,2,3,4}
1 2 3 4
^ ^
a[0] a[1] a[2] a[3]
a是一維數組名,代表數組的首地址.也就是a[0]
*(a+1) 指針移動2個位元組,指向下一個數組元素,就是a[1]

int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}
^ ^
*a[4] 或a[][4] 或a[3][4] 都可以表示行指針.
操作
a是二維數組名,代表二維數組的首地址,也就是a[0][0] = 1
*(a+1)[4] 指針指向a[1][0] = 5 ,也就是指向下一行數組元素的首地址.一次跳躍到下一行.

『伍』 C語言中二維數組行指針是什麼

先從存儲的角度對二維數組作一個全面的了解。二維數組在內存中的存儲,是按照先行後列依次存放的。從內存的角度看,可以這樣說,二維數組其實就是一個一維數組,在內存中沒有二維的概念。如果把二維數組的每一行看成一個整體,即看成一個數組中的一個元素,那麼整個二維數組就是一個一維數組,它以每一行作為它的元素,這個應該很好理解。
第一,來詳細介紹二維數組與指針的關系。-
首先定義個二維數組 array[3][4],p 為指向數組的指針。
若p=array[0],此時p指向的是二維數組第一行的首地址,則 p+i 將指向array[0]數組中的元素array[0][i]。由以上所介紹的二維數組在內存中的存儲方式可知,對數組中的任一元素array[i][j] ,其指針的形式為:p+i*N+j (N為每一行的長度)。 元素相應的指針表示法為:*(p+i*N+j) ,下標表示法為:p[i*N+j] 。
For Example:
array[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
int * p=array[0];
數組array有四個元素,分別為array[0],array[1],array[2],array[3],每個元素為包含3個元素的一維數組,
如array[0]的3個元素為 array[0][0],array[0][1],array[0][2]。
元素array[2][2]對應指針為:array+2*3+2,
指針表示法為:*(array+2*3+2) ,
下標表示法為:array[2*3+2] 。
特別注意:雖然 array[0] 與 array 都是數組首地址,但兩者指向的對象不同,這點要非常明確。array[0] 是一維數組的名字,它指向的是一維數組array[0]的首地址,所以 *array[0]與array[0][0]為同個值。而 array 是二維數組的名字,它指向的是所屬元素的首地址,其每個元素為一個行數組。它是以『行』來作為指針移動單位的,如array+i 指向的是第 i 行。對 array 進行 * 運算,得到的是一維數組 array[0] 的首地址,所以 *array 與 array[0] 為同個值。如果定義 int* p,p為指int類型的指針,指向int 類型,而不是地址。故以下操作 :p=array[0] (正確) ,p=array (錯誤) 。這點要非常注意。
第二,看看如何用數組名作地址表示其中元素。
對二維數組array ,array[0] 由 array指向,故*array 與array[0] 是相同的,依次類推可得 array[i] 由array+i 指向,*(array+i) 與array[i]是相同的。 因此,對於數組元素 array[i][j] ,用數組名表示為 *(*(array+i)+j) ,指向該元素的指針為 *(array+i)+j 。
注意:數組名雖然是地址,但與指向數組的指針性質不同。指針變數可以隨時改變其所指向對象,而數組名不可以,一旦被定義,就不能通過賦值使其指向另外一個數組,但是在Java中則可以。
第三,順便了解一下不太常用的『行數組指針』。
對於二維數組array[4][3],與int* p 。二維數組名array 不能直接賦值給p。原因前面已講過,兩只的對象性質不同。 在C語言中,可以通過定義一個行數組指針,使得這個指針與二維數組名具有同樣的性質,實現它們之間可以直接賦值。行數組指針定義如下:
int (*p)[3]; 它表示,數組 *p 具有三個int類型元素,分別為 (*p)[0] , (*p)[1] , (*p)[2] ,即 p指向的是具有三個int類型的一維數組,也就是說,p為行指針。此時,以下運算 p=array 是正確的。
第四,二維數組作為函數參數。
二維數組作為函數參數一般有兩種方式:(1) void func(int **array){...} (2) void func(int array[ ][N])
注意第二種方式一定要指明二維數組的列數
當二維數組名作為函數實參時,對應的形參必須是一個行指針變數。
和一維數組一樣,數組名傳送給變數的是一個地址值,因此,對應的形參也必須是一個類型相同的指針變數,在函數中引用的將是主函數中的數組元素,系統只為形參開辟一個存放地址的存儲單元,而不可能在調用函數時為形參開辟一系列存放數組的存儲單元。
int main()
double a[3][4];
……
fun(a);
……
fun(double (*a)[n])
……

『陸』 c語言中,指針數組和行指針的區別是什麼

int(*p)[4],這個就是行指針
這種類型的指針p是指向一個一維數組,這個一維數組包含4個整形元素
但是 int a[4];p=a; 這種方式卻是不對的
因為p只能指向一個整型的一維數組,不能指向一個整型數據,a所指向的正是a[0],是個整型數;
實際上int(*p)[4]這種類型的指針是用於多維數組中的,比如定義一個二維數組int b[3][4],就可以這樣賦值p=&b[0],使p指向一維數組b[0],而且p的增減是以一維數組的長度為單位的,比如p+1指向的就是b[1]了

int *p[4]這個是指針數組了,首先弄明白這個是數組,裡面存放的是指針也就是地址,這個地址所指向的是一個整型數據,你可以把p[0],p[1]....當作一個個的指針變數來使用

我學的時候也弄了半天才搞明白,這是我總結的,你多看看指針那關於多維數組與指針的一節,做些練習自己驗證幾次就容易弄明白了

『柒』 c語言中,行指針指向哪裡,為什麼(*p)[]方框里是二維數組的列不是行,他不是行指針嗎

(*p)[X]只是說p是指向一個具有X列的一維數組的指針,指針的類型(就是這個一維數組的元素的類型)有待你聲明,X的大小也要你寫明確,否則p就不可用;p確實是行指針,是指向一行一維數組的,但一個一維數組的長度不是用列數來表示的嗎?至於p指向了哪一行,那要由代碼給它賦值了才能知道。比如有int a[3][4],(*p)[4],p=a;,那麼這時p就指向了第一行(第一下標為0的那一行),p+1就指向了第二行(第一下標為1),p+2就指向了第三行(第一下標為2)。若沒有賦值(沒有寫p=a),那麼p就只是一個能指向列數為4的(即數組長度為4)int型數組的指針,它這時還是野指針,沒有具體指向!

『捌』 C語言中如何定義一個行指針

int *arry[10]; //指針數組
int (*arryp)[10]; //數組指針,因為數組指針指向數組,而數組也可看做是個指針,那數組指針可以理解為一個二 級指針
int a[10];
arryp = &a; //將數組地址個數組指針
arry[0] = *arryp; //arry[0]是一級指針,要將數組指針賦給指針數組,就要取內容,實際就是 arry[0] = a;

『玖』 C語言什麼叫行指針它與數組指針有什麼聯系和不同點

數組指針就是一個數組的地址, 行指針出現在二維數組里就是是二級指針那裡附近,例如 int a[10][5]; 那麼二維數組可以可分為行和列,那麼要找到每一個數組就要通過哪行和哪列查找,a[10][10]中第一個小標表示行,第二個下標表示列,那麼 a[1],a[2]表示對應行的指針,記得在二維數組中約定a[1],a[2]表示的是指針,在一維數組中a[1],a[2]表示的是元素,我知道你雲里霧里的這里比較難記住既可以了,不要問為什麼,記得這是語法規定的就可以了

熱點內容
安卓在哪裡找游戲 發布:2025-07-04 22:15:25 瀏覽:241
路由器訪問光貓 發布:2025-07-04 22:07:47 瀏覽:897
資料庫顯示語句 發布:2025-07-04 22:04:30 瀏覽:740
編程課道具 發布:2025-07-04 22:04:02 瀏覽:844
華為手機不是安卓什麼時候可以更新米加小鎮 發布:2025-07-04 22:01:37 瀏覽:785
飢荒伺服器搭建視頻 發布:2025-07-04 21:48:38 瀏覽:523
github上傳文件夾 發布:2025-07-04 21:29:22 瀏覽:1003
php課程學習中心 發布:2025-07-04 21:29:16 瀏覽:298
win7加密文件夾如何解密 發布:2025-07-04 21:25:24 瀏覽:555
為啥系統緩存的垃圾多呢 發布:2025-07-04 21:15:45 瀏覽:952