c語言中指標變數指向陣列怎樣使其移回第一位

時間 2021-08-30 10:38:27

1樓:王天旻

#include

main()

;int *p;

p=a;

printf("%d",*(p+1));

}最原始的方法,p加幾就只向哪一位。不加就指向0位;

移回第一位的問題我也碰到過,可以這樣

int *q;

q=p;

然後對p操作,最後

p=q;

移回來把指標當引數時常有。

2樓:長巷煙雨

1樓說錯了, 陣列名是常量指標 而不是指標常量。

樓主的問題我理解的不是很明白。。。

int array[10];

int *p;

p = array; // p指向陣列的第一位p = array + 1; //p指向陣列的第二位,依次類推。不知道是不是問的這個問題

補充:struct _student crecord[c_n]=;

struct _student *cp

cp=&crecord;

你可以 cp->m_sznum[1]; 或者 (*cp).m_sznum[1]; 兩種方式都可以

3樓:

有的,看示例:

int a[10];

int *p ;

p=a;

要p指向的第i(i>=0 && i<10)位可以使用p = a+i;即可實現。

這樣指標p就一直指向陣列的首地址。

4樓:風若遠去何人留

兩種方式:

1 在移動的時候,記錄移動的偏移量,存在變數n中。這樣對於移動後的指標p,計算

p-=n;

就是將其移動到第一位。

2 更常用的方式為,在有此類需要時,運算前儲存原始的位置,即定義同類變數p1,指向第一位,比如計算前做p1 = p;

這樣在需要移回時,只需要p = p1即可。

如果p移動時與原始陣列在同一個作用域內,那麼也可以直接重新複製p為原始陣列名。

5樓:匿名使用者

補充:你要指向陣列的話只能定義一個char型別的指標。例如:

char *p;

p=cp->m_sznum+n;//(n=0,1,2,...)

6樓:匿名使用者

不明白你的意思 陣列名預設就是指向陣列的第一位 但是它是一個指標常量

7樓:難得當歌對酒時

令其等於陣列名就可以移回第一位,然後移到哪一位就加幾。

8樓:匿名使用者

把資料下標為0的元素指標賦值給它

c語言中關於指向陣列的指標

9樓:

char str[100];

char *pi=str; //相當於char *pi ;pi=str;

char **ppi=*pi;//這個地方抄錯了。應為char **ppi=&pi;

定義加*表明這是指標型別的變數

用的時候,就是用的指標,加*幹什麼。

只有取指標所指變數的值,或給指標所指的變數賦值的等涉及指標所指的變數的時候,

才會又加*號,表示獲取或改變,指標所指變數的值。

char x=10;

*pi =x; //給指標所指的變數賦值,改變指標所指變數的值(改變*pi) 。

x=*pi; //取指標所指的值,取指標pi所指的變數的值(表示為*pi)賦值給x。

10樓:匿名使用者

pi ppi是指標 帶*是取值的意思

*pi=str 意思是把str這個陣列的首地址 放在pi所指的空間裡 換句話說就是pi指向了str陣列。用pi+1之類的就可以指向陣列裡面的東西 *(pi+1)等同於str[1]

11樓:匿名使用者

因為不管是str還是pi, ppi都指的是地址,函式呼叫時只需要知道引數的地址就行,然後再去取裡邊的值,而不用加上星號來傳遞裡邊的值。

12樓:匿名使用者

因為陣列的名字,本身就是指向陣列頭的指標。另外char **ppi=*pi;是不對的吧。這意思是給一個指標賦值一個常數,這樣的賦值只允許右值為0的

13樓:

你給的第三條語句語法是錯的,應該是char **ppi=π

14樓:連嘉悅牢義

首先要明白,指標陣列中儲存的是指標,也就是說兩個元素都是指標,而且存放的也的確是「a」和「a」的地址,但要知道字串和字元是兩個不同的資料型別,也就是說雖然存放的地址是一樣的,但指標的型別不能理解為是指向字元「a」和「a」的指標,應該是指向字串「abcd」和「abcd」的,明白的麼?

15樓:端麗芳表曄

要點:理解陣列名其實就是一把指標!它指向所有元素的第一個inta[10];

則它的記憶體分佈:a[0]

a[1]

a[2]

a[3]

a[4]

a[5]

a[6]

a[7]

a[8]

a[9]

陣列名a

就是指向了第一個元素

a[0]

的地址(注意是地址)所以上面的也可表示為:

*(a+0)

*(a+1)

*(a+2)

*(a+3)

*(a+4)

*(a+5)

*(a+6)

*(a+7)

*(a+8)

*(a+9)這是一樣的!而如果定義一把指標並賦值:

int*p;p=

a;則p

現在和a都指向了第一個元素a[0]的地址,所以它的用法和a一樣如:*(p+0)=p[0]=a[0]=*(a+0)

,*(p+1)=p[1]=a[1]=*(a+1)……看領會下就懂了哦~~~

c語言中指向陣列元素的指標, 有一點是 "一個指標變數可以把陣列名或第一個元素的地址賦予指標變

16樓:hdu我愛c語言

比如說陣列 int a[10];之後你第一個指標 int *p;p=a或者p=&a[0],這兩個是同一個意思。

你這樣操作之後 p ,a ,&a[0],基本就是同一個意思。

17樓:唐麗梅

就是當你定義一個陣列m的時候,然後定義一個變數pm指向它,則這個變數pm一開始的時候指向的是這個陣列m的首地址。無論這個陣列m裡面有沒有值,都是指向第一個元素m[0]。

陣列名是陣列名,不是首地址。

但是一開始分配的時候,陣列的首地址正好是第一個元素的首地址。

18樓:開尋芹

&m就是首地址,不是指向。

19樓:匿名使用者

其實很多課本上的話都說的比較費解!!(也是這麼摸索過來的)這句話的意思真正來說是強調陣列的陣列名其實就是一個指標,它指向該陣列的首地址。比如int a[10],這個陣列內有10個int型元素,當你用你的第一個元素時,會使用a[0],它的作用就是*(a + 0),根據你學過指標知識,意思就是讓指標a偏移0次後取出資料。

相應的a[1]~~~其實都是在陣列首地址的基礎進行偏移後得到的。所以當然可以把陣列名賦予給一個指標變數啊。

c語言中指向陣列元素的指標, 有一點是 "一個指標變數可以把陣列名或第一個元素的地址賦予指標變 20

20樓:匿名使用者

就是指向每一行的指標,比如說二維陣列a[2][3];a[0]代表的是二維陣列第零行的首地址相當於&a[0][0];a[1]代表的是二維陣列第一行的首地址相當於&a[1][0];a[0]+1代表的是二維陣列第零行,第一列的地址相當於&a[0][1]

c語言中指標變數怎麼理解?怎麼用

指標變數是一個變數,它儲存的是另一個變數的記憶體地址。你如果知道了這個指標變數儲存的值,就可以知道它所指向變數的記憶體地址,於是就可以間接訪問到那一個變數。定義 指標變數型別 指標變數名1,指標變數名2,例如 int main void 把指標作為函式的引數傳遞,可以使函式可以訪問函式外部的變數,例...

關於c語言中指標賦值的問題,關於C語言中指標賦值的問題

計算天下 你這樣想說明你還沒有真正理解記憶體和指標。int a 表示編譯器隨機取出一個空閒的地址分配給a,不妨設為00000000,長度為sizeof int 不同編譯器可能不同。int p 也表示隨機取出一個空閒的地址分配給p,不妨設為000000f0,長度一般為4個位元組,則這四個位元組現在儲存...

c語言中指標做函式引數傳遞二維陣列

include void fun int p1 3 int p2 3 int main int p1 3 3 int p2 3 3 int i 0,j 0 fun p1,p2 for i 0 i 3 i for j 0 j 3 j printf d p2 i j printf n return 0 ...