急求C語言,如果不定義行指標 p ,就只能一行一行輸出嗎

2021-03-18 15:32:18 字數 3336 閱讀 9680

1樓:飄零的狐狸

這樣行不行?

源**  可追問  請採納

#include "stdafx.h"

#include

void search(int i,int *p)}int main(int argc, char* argv);int *p;

p=(int *)a;

search(1,p);

return 0;}

2樓:匿名使用者

//不考慮越界的話

#define c 4

void search(int i, int *p)int a[3][4]=;

則這樣呼叫:

int *p=&a[0][0];

search(0,p);

search(1,p);

search(2,p);

c語言中,行指標指向**,為什麼(*p)[]方框裡是二維陣列的列不是行,他不是行指標嗎

3樓:

(*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語言行指標

4樓:黃邦勇帥哥哥

錯解了。p沒有指向a[0][0],因為使用*p不能輸出a[0][0]的值,*p才是指向a[0][0]的,因為**p就是a[0][0]的值,而且*p輸出的是&a[0][0]的地址。p是指向的a[0]也就是說p=&a[0]=a+0;的,也就是指向的二維陣列的第一行。

p++ = &a[1]=a+1; 也就是指向二維陣列中的第二行。

總之,要記住的是a[1]才是指向的二維陣列中第2行第1個元素的地址。

而&a[1]表示的就是二維陣列中第二行的行地址。

同樣,因為a=a+0,表示的是二維陣列中第一行的行地址。因此a+1就是表示的是二維陣列中第二行的行地址。

還要記住:[ ]這個運算子的的運演算法則是,把左側的地址加上[ ]內的偏移量然後再求指標運算,注意有[ ]運算子的地方就有個隱含的指標,比如x[2]表示的就是將指標x偏移2個單位量後再求指標運算。也就說x[2]與*(x+2)是相等的。

5樓:匿名使用者

二維陣列也是用一維來儲存的,第一行先存接著是第二行,

p++時要考慮p的型別,因為int(*p)[4]是個指向陣列的指標,所以p++相當於跳過了4個元素,指向下一行的第一個元素a[1][0];

你可以寫個程式p++以後輸出就能看出來了。

6樓:匿名使用者

p++指向a[1][0].因為p為行指標。

如果int *p=a,那麼p++,指向a[0][1]

求c語言大神! 若有定義"double(*p)[4]:",則p是行指標,p佔一個儲存單元 這句話是對的還是錯的?

7樓:happy菠菜

錯的, p是指向陣列的指標,估計可以叫行指標。 但是p是指標,在pc上指標是4個位元組,所以p佔一個儲存單元是百分百錯的。

c語言中,指標陣列和行指標的區別是什麼?

8樓:藏天地

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]....當作一個個的指標變數來使用

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

9樓:匿名使用者

簡單的說就是一個是指向陣列的指標,一個是陣列成員是一族指標

具體哪個是哪個我也時常分不清楚。但用起來就知道了

c語言中,關於指標int(*p)[4]和int*p指向二維陣列a[3][4]初始化的問題。

10樓:匿名使用者

二維陣列相當於多行列數相同的一位陣列組合起來;int (*p)[n]定義一個行指標p,其中:

p自增1,p指向下一「行」一維陣列的首地址因為p是一個二級指標。

所以索引其指向的資料內容需要取二次內容,格式及解釋如下:

格式:*(*(p+行)+列)

解釋:其實很好理解,因為p作為二級指標,p++代表的僅僅是行號+1所以格式中*(p+行)就取到了所在行首地址指標(因為p是二級指標,取一次內容之後,取到的內容還是指標)現在把*(p+行)整體看作一個一維陣列指標再進行一位陣列的指標內容索引*(*(p+行)+列)就能索引到內容,當然也能進行初始化了!

例子:#include

void main()

/*用行指標的初始化與輸出*/

p=a;

printf("input:\n");

for(i=0;i<3;i++)

for(j=0;j<4;j++)

scanf("%d",*(p+i)+j);

printf("二維陣列\n:");

for(i=0;i<3;i++)}結果

11樓:匿名使用者

int (*p)[4];

陣列指標,每個元素都是指標, 每個元素可以指向一個一維陣列int * p

指標, 指向一維陣列

12樓:匿名使用者

還是我來告訴你吧!前者是二級地址,就是地址的地址。後者是一級地址,雖然指向的也是一個地址,但是定義的時候申明的是一級地址。

13樓:匿名使用者

int (*p)[4];p=a;int *p;p=a[i];//(i=0,1,2)

c語言,較急,求大神,c語言,較急,求大神!

include stdio.h int main printf ld ld ld ld n a,b,c,d return 0 如需從檔案讀取內容 請使用檔案讀寫函式 這個太簡單了,大概方法就是這樣,剛寫的,沒編譯過,buf是輸入,out是輸出。char asccodeflag 256 void co...

C語言指標越界問題,大神指教,求c語言大神指教指標問題

p是指向int型別的指標,a為陣列首地址,這些理解都是對的,但是,p沒有被初始化 啊,你能直接是用沒有被初始化的變數嘛,那肯定是不行的啊.所以正確的做法先給p繫結堆記憶體就可以這樣寫了.include using namespace std int main p array cout p 1 end...

急求c語言基礎題請求答案啊,急求C語言基礎題請求答案啊

9 x 2 0 x 212 float x x float a b 17 include math.h 20 a 1 1 21 x 2 22 6 5 23 x rand b a 1 a 24 7 25 4 20 a.a 22 b ch 0 ch 9 23 d.67 25 d.e 0 26 d a 0...