一道關於C語言指標問題,一道關於C語言的指標問題

時間 2021-05-07 20:00:10

1樓:匿名使用者

chp最初指向b[3],也就是'f'

while(--chp<&b[0]);

注意這裡有分號,迴圈體是空語句

chp先指向b[2],也就是'e',顯然&b[2]<&b[0],不成立,所以跳出迴圈

執行putchar(*chp);

輸出字元e

2樓:

首先char *chp=&b[3];可以得知,*chp=『f』;

然後while(--chp<&b[0])

--chp後*chp='e'

chp地址沒有b[0]地址小,所以while迴圈判斷失敗,跳出迴圈putchar(*chp);表示輸入一個字元,當前字元是e,所以輸出e

3樓:未王艮

while(--chp<&b[0]); 因為--chp>&b[0],請注意這個while迴圈未迴圈一次,所以僅是chp-1地址指向e字元所在地址

然後輸出e

4樓:匿名使用者

putchar是輸出單個字元的

char *chp=&b[3]; //chp指向fwhile(--chp<&b[0]);//chp指向e輸出e

一道關於c語言的指標問題

5樓:匿名使用者

下面解釋一下為什麼選b

p是a[0]的指標當然*p=a[0]了也就是1那麼為什麼輸出*(p+3)時結果是版6而不是權4呢?

是因為*(p+3)+=2也就是:

*(p+3)=*(p+3)+2

在執行上面賦值表示式時剛開始時*(p+3)的值是4但是*(p+3)=*(p+3)+2也就是*(p+3)=4+2這一步是把*(p+3)看做一個變數對其進行從新賦值,就得結果6了。

6樓:匿名使用者

p=a:這裡

抄將p指向a的首地址,也bai就是a[0]的地址所以p+3也就是指向相du對於a偏移3個單位的成員,zhi也就是a[3]的地dao址了,

所以*(p+3)也就是a[3](就是陣列中的4),*(p+3)+=2,就是將a[3]的值再加上2,所以就由4變為6,所以最後輸出*p,*(p+3)的值就變為:1,6

7樓:翱翔之冠軍

﹡p是指向第一個

﹡(p+3)等於﹡(p+3)+=2

所以分別指向第一和第六

一道c語言指標問題

8樓:

int * a[10] ,是指標陣列,每個a[i]都是指向 int型的指標

比如 int abc;

a[0]=&abc;

int (*a)[10],是陣列指標,a 是指向一個有10個元素的int型陣列

比如int abc[10];

a=abc;

9樓:匿名使用者

int *a[10] a是陣列,a裡存放的是10個int型指標

int (*a)[10] a是指標,指向一個陣列,此陣列有10個int型元素

10樓:手機使用者

在c語言程式中,只能給指標變數賦 地址 值 和 指標 值。

例如int i = 0;int *p;p = &i; /* 賦值地址 */int *q;q = p; /* 指標賦值 */

c語言指標的賦值問題

11樓:大野瘦子

指標在用要注意初始化,例如:

int *p;

p為指標,地址是未知的,如果直接賦值

*p=a;這樣編譯可以通過,但是會產生警告,p的地址是隨機分配的,這樣對未知的地址賦值很危險,可能會覆蓋掉某些重要資料,所以避免這種危險,在定義指標時注意初始化,也就是賦值。

可以int *p=&a;

或者int *p;

p=&a;

然後再對p進行操作

有錯。注意大小寫,還有

int a=9;

int *p;

p=&a;//這個是指標指向a

*p=8;

這樣就對了。

指標的賦值

int *p;

int a;

int b[1];

p = &a;

p = b;

指標的賦值,「=」的左運算元能夠是*p,也能夠是p。

當「=」的左運算元是*p時,改變的是p所指向的地址存放的資料;

當「=」的左運算元是p時,改變的是p所指向的地址。

陣列的變數名b表示該陣列的首地址,因此p=b;也是正確的

同型別的指標賦值:

int val1 = 18,val2 = 19;

int *p1,*p2;

p1 = &val1;

p2 = &val2;

p1 = p2;   //注意啦,p1指向了val2,而沒有指向val1

備註:字串與指標的初始化和賦值

初始化:

char *cp = "abcdefg"; //這個初始化過程,是將指標cp指向字串的首地址,而並非傳遞字串的值。由於,在c語言裡面,沒有總體處理一個字串的機制

賦值:cp = "abcdefg";

*cp=」abcdefg」 ;//錯誤!字串常量傳遞的是它的首地址,不能夠通過*cp改動該字串的值,由於該字串為常量,而它僅僅是簡單的將指標指向該字串常量。

12樓:林聲飄揚

有錯注意:用指標變數前,必須對指標變數賦值如:int i, *p1;

p1=&i;

再如:int a, b;

int *p1, *p2;

*p1=10; *p2=100;

但指標變數未賦值,即指標指向未知地址,這樣是錯誤的因此:絕對不能對未賦值的指標變數作「指向」運算。

int a=9,b;

int *p=&b;//必須加上這一句

*p=a;

*p=8;

這樣就不會產生錯誤

13樓:匿名使用者

注意大小寫!還有

int a=9;

int *p;

p=&a;//這個是指標指向a

*p=8;

這樣就對了。

14樓:七先生是遊戲鬼才

這個還是比較複雜的,你可以學習一下

15樓:匿名使用者

p=&a//把a的地址給指標p

16樓:匿名使用者

語法上沒錯,但可能出現警告,破壞程式其他資料

17樓:渾濃強浩然

p就是一個指標,他指向一個地址,而&p就是p剛才所指向的具體地址,*p是p指向地址裡面的東西。也就是值。*p=&a的意思是把a的地址給了*p,這樣的話p就指向

(指向a的地址)的地址。對指標賦值必須是int*p=null;或者int

*p;p=null。

一道c語言指標的問題

18樓:匿名使用者

在c語言程式中,只能給指標變數賦 地址 值 和 指標 值。

例如int i = 0;

int *p;

p = &i; /* 賦值地址 */

int *q;

q = p; /* 指標賦值 */

19樓:沉淪消逝

地址和變數 ps:null本身就是一個地址值

20樓:匿名使用者

只能給指標變數賦地址值和null

21樓:匿名使用者

變數地址 null

一道c語言的指標問題

22樓:匿名使用者

a) char s[5]="abcde" bai//字串這樣賦值時,末尾有一個du預設的zhi串尾符\0,所以字串"abcde"的實際長度是dao

回6,s[5]是儲存不下的,溢位答

了b) char *s; gets(s);

//char *s只是宣告瞭一個指標,並沒有分配儲存空間,所以用gets(s);給s賦值時,會導致野指標訪問異常

//scanf使用%s控制符讀取字串時,要求傳遞的是字元陣列的首地址,也就是s,不是&s

一道c語言指標問題

23樓:行者無懼

#include

float max(float a,float b)

main()

24樓:匿名使用者

你這能編譯過嗎? (*p)() ;後面的形參列表表示指標變數指向的函式所帶的引數列表

修改為float (*p)(float,float);試試

關於c語言的一道題,關於C語言的一道題

龍 鳳 兩個for迴圈,再建立一個動態陣列,就可以了 include include include char submaxstring const char str1,const char str2 int size strlen str1 strlen str2 strlen str1 strl...

關於一道c語言題,求詳解,急求,關於一道C語言題,求詳解,急求

在主函式裡 是先執行fx 這個函式的,而執行這個函式得到的值x 15,而後x x a 15 5 20.a 5 所以輸出是 20 和 5 主函式的x帶的是全域性變數的值是fx函式得到的x的值15,而不是定義全域性變數的初始值,也不是fx函式裡x的初值 在這個程式裡用全域性變數無非是想說明全域性變數x在...

一道C語言的問題,一道c語言的問題

對於陣列,a 10 a代表首地址,a 0 a 1 代表的是第一個的值,所以要取地址,而b本來就是地址,不用再取 a是陣列首地址相當於a 0 a 1 是陣列第二個地址,錯誤 int a 10 a 0 a 1 是元素,不是地址。a 0 a 1 才是地址陣列名是地址,這是約定 int rootbeer 1...