c語言指針與二維數組
1. c語言 指針與二維數組
這已經說得很明白了,記住就是了。p=a[i]就是取a[i][0]的地址,賦值給p。
2. C語言指針與二維數組
a是二維數組名,其字面值是該數組的起始地址,該地址同時也是一維數組a[0]的起始地址
所以a,*a,a[0],&a[0]的字面值都相同,a[0][0]就是首個元素
剩下的幾行輸出同理,無非就是行指針偏移的+1是以第二維的大小移動的而已
3. C語言指針及二維數組
一、p是存放float型數據的地址,而11是整型數據,當然不能做比較
二、因為pend也是地址
如:
p指向地址0x0012FF60 pend = p的話,pend也為0x0012FF60
pend = p+1,則p指向0x0012FF64 因為float佔4個byte
pend=p+2 0x0012FF68
...
三 傳入*a相當於傳入&a[0][0]的地址,即二維數組a的地址
相當於
float* p = &a[0][0];
aver( p, 12 );
p是地址,*p則取到該地址里存地數據,即該程序的中的65
*(p+1)則會取到67 --二維數組是按行存儲的
...
以此類推
p是個一級float型指針,所以**p顯然不合邏輯,不合語法
4. C語言怎麼用指針代替二維數組
設二維數組為typename
a[M][N],則指向該數組的指針為typename
(*p)[N]
=
a;這樣就可以用p來代替二維數組了。
5. C語言中關於二維數組和指針的問題
*(p+1)單獨使用時表示的是第 1 行數據,放在表達式中會被轉換為第 1 行數據的首地址,也就是第 1 行第 0
個元素的地址,因為使用整行數據沒有實際的含義,編譯器遇到這種情況都會轉換為指向該行第 0 個元素的指針;就像一維數組的名字,在定義時或者和
sizeof、& 一起使用時才表示整個數組,出現在表達式中就會被轉換為指向數組第 0 個元素的指針
6. c語言指向指針的指針,與二維數組
二維數組指針和指向指針的指針不是一回事
int
(*p)[3]
用於指向列數為3的二維數組
int
**p
不能用於二維數組
7. 如何在c語言二維數組中使用指針
程序中有些問題:
1、函數的定義有錯誤(參數格式不對);
2、程序中沒有調用函數(或者說是調用格式有誤)
3、函數中的處理邏輯需要修改(一步一步來,這樣容易處理和理解)。
你定義的函數是使用數組作為參數的,數組名本身就是個地址(相當於指針)。
下面在手機上用易歷知食軟體里的微C程序設計來演示修正後的代碼並運行程序,供參考。
手機上修正後的代碼如下圖:
手機上運行的效果如下圖所示:
8. C語言如何定義指針指向字元型二維數組
使用指針變數訪問二維數組的任意一個元素的方法:
1.使用列指針:定義一個列指針p,讓它指向二維數組的第0個元素
int a[3][4];
int *p;
p=&a[0][0];
//因為a[0]是第0行的數組名,所以p=&a[0][0]相當於p=a[0],因為a[i][j]前面共有i*4+j個元素
該二維數組的任意i行j列元素可表示為*(p+i*4+j)。
2.使用行指針:定義一個行指針p,讓它指向二維數組的第0行
int a[3][4];
int (*p)[4];
p=a; //也可以為p=&a[0];
其中* ( *(p+i)+j)表示任意一個i行j列的元素。
(8)c語言指針與二維數組擴展閱讀:
數組的使用規則:
1.可以只給部分元素賦初值。當{ }中值的個數少於元素個數時,只給前面部分元素賦值。例如:static int a[10]={0,1,2,3,4};表示只給a[0]~a[4]5個元素賦值,而後5個元素自動賦0值。
2.只能給元素逐個賦值,不能給數組整體賦值。例如給十個元素全部賦1值,只能寫為:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能寫為:static int a[10]=1;請注意:在C、C#語言中是這樣,但並非在所有涉及數組的地方都這樣,資料庫是從1開始。
3.如不給可初始化的數組賦初值,則全部元素均為0值。
4.如給全部元素賦值,則在數組說明中, 可以不給出數組元素的個數。例如:static int a[5]={1,2,3,4,5};可寫為:static int a[]={1,2,3,4,5};動態賦值可以在程序執行過程中,對數組作動態賦值。這時可用循環語句配合scanf函數逐個對數組元素賦值。
網路-數組