有關C語言指標的問題,有關C語言指標的一個問題

時間 2022-03-15 15:15:19

1樓:匿名使用者

第一個程式不會報錯,第二個會。

scanf("%d",a_p);的確可以改變a的值(這理所當然),因為這個改變是通過scanf函式改變的,並不是通過a_p改變的啊。

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

2樓:風若遠去何人留

*p++ 先取值,也就是*p

然後自加的是p, 而不是*p

這裡 p初始為a。 也就是迴圈中, 依次做的都是自己給自己賦值。a中值不變。

所以最終列印a[2]還是初始值, 6

3樓:神話杜十三

#include

main()

,*p=a,i;    // 變數宣告和初始化   (指標p 等價於 陣列a)

//遍歷陣列a

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

a[i] = *p++;        // 根據p++ 採用的是先取值後計算的方式(*p = a[i]),

// 該賦值等價於 a[i] = a[i]  (p++ 同步i++)printf("%d\n",a[2]);    // a[2] = 6}

4樓:聽不清啊

這個迴圈等於沒有執行(它相當於把整個陣列的每一個元素,自己複製到自己)

最後輸出的是:6

有關c語言的一個指標問題

5樓:匿名使用者

作者的意思是 給指標變數賦一個int型別是不對的,也就是說:

int *i_pointer = 100; i_pointer是指標型別,100是int型別,顯然是不對的,作者寫成:

*i_pointer = 100;是會讓人產生疑惑的,應該說:

int *i_pointer = 100; 是錯誤的。

6樓:逸

那本書上是下劃線,不是減號。。。是*i_pointer=100,i_pointer是一個指標變數。。。不知道朋友是不是寫錯了。。。

7樓:誠毅學長

int i;

int *i_pointer = &i;

i = 3; 是可以的

i_pointer = 3; 資料型別不一致3是int型別,而i_pointer是int*型別,雖然地址的值可能是int或long,編譯器是防止你不小心輸入錯誤

你可以i_pointer = (int*)3;

8樓:本採白殷海

標準的答案!因為p是個int*而a是個char*p++一次移動4個位元組,所以*p=*p+1在a陣列的範圍內修改了a[0]和a[4],i>1以後的都是越界操作

於是最終輸出dhinb

你用的什麼編譯器,像p=a這個在目前的編譯器是通不過的

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

9樓:匿名使用者

這肯定是必然的了,

開始int *ptr=array;此時*ptr等於array[0]即為6

之後你執行了*(ptr++)+=123;

這句話相當於 *ptr += 123;

ptr = ptr +1;

此時array[0]的值增加為129;

*ptr 此時等於 array[1] 即為7

之後你執行printf("%d,%d",*ptr,*(++ptr));

printf語句從右向左讀取,所以編譯器先計算*(++ptr)的值;

而這句話相當於 *(ptr+1);

ptr = ptr + 1;

之後編譯器在計算*(ptr)的值,兩次的值當然一樣。

首先,你要弄清楚 ptr++表示先使用ptr的值,再讓ptr的值自增1

而++ptr的值是先使用ptr+1的值,再使ptr的值自增1

還有printf語句是從右向左讀取執行的 但是顯示的順序並不改變

比如printf("%d,%d",15,20);還是會顯示 15,20,僅僅是編譯器讀取這句話的順序為自右向左

10樓:情感世界

# include

void main()

;int *ptr=array;

*(ptr++)+=123;//使array[1]=7+123=130

printf("%d,%d",*ptr,*(++ptr));//先輸出*(++ptr)=8,再輸出*ptr=8

}所以輸出8,8

11樓:匿名使用者

1樓說得有點問題

*(ptr++)+=123;//先array[0]=6+123=129 後移動指標

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

12樓:匿名使用者

二維陣列相當於一個一維陣列裡面的元素都是一維陣列;二維陣列名也相當於一個二級指標。一維陣列:*a=a[0];二維陣列:

**a=*a[0]=a[0][0];通俗點寫就是a=&a[0],a[0]=&a[0][0],因為&a[0]==&a[0][0],所以a於*a指向同一個地址&a[0][0],則**a==a[0][0]

關於c語言指標的一個問題!

13樓:匿名使用者

a=b;的意思是把b的值賦給a;

不要因為=是賦值符號,就理解為把a賦值給b,其實=就是等號"->"結構體指標訪問成員時使用

"."結構體訪問成員時使用

struct stu

a,*b;

b=&a;

a.id=10;

b->id=12;

14樓:

本人對第五行的max=min=*array;不理解,為什麼*array可以同時指向max和min?

不是array同時指向max和min是max和min的值都被賦值為array所指向的值。

「->」 這個符號能否給個詳細的解釋?

就是指標所指向物件的成員。

15樓:匿名使用者

max=min=*array表示的是max和min都等於array指向的值 而不是array可以同時指向max和min

16樓:鷹擊長空

舉個例子:p->num與(*p).num是等價的,表示該指標指向變數num。

如果你看的是譚浩強主編的c程式設計,就看11章第6節,在268頁,上面有詳細說明。你的這個例子在10章第3節,在219頁。如果是第二版(我的就是),現在最新的是第三版。

17樓:匿名使用者

啥叫指標呀?問一下樓主。

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

18樓:文正

這個在部分編譯器是錯誤的.主要是這個s="hello world!"; 這句如果和定義那句合到一起, 就絕對對了.

其實, char *s="hello world!";執行完後, 記憶體中多出來16位元組, 其實12位元組儲存hello world!字串, 4位元組儲存它的首地址, 即h的地址.

如果設定只讀字面量池,

char *p = "abcde";

char *q = "abcde";

q和p是相等的.

19樓:匿名使用者

「hello world!"這是字串常量,其本身存放在常量區.

char *s ; 此條語句表示定義了一個存放字元型地址的指標變數s.

s="hello world!";此句表示把常量區的「hello world!"字串的首地址賦值給s,即存放到變數s裡面。

printf("%s\n",s);此句裡,%s,表示從s給出的地址開始列印字串,故輸出:hello world!

有關c語言指標的問題

20樓:

p1=&a1;這是把p1指標指向了a1變數所在的地址。。p2=&a2;這是把p2指標指向了a2變數所在的地址。

而t=*p1,這個*p1在右邊就是取得p1所指向地址內的值,所以t=11。

*p1=*p2;左邊*p1是指向a1變數地址,也就是和變數a1相當。。右邊*p2是取得p2所指向的地址內的值22,這個執行結果實際就相當是a1=22。

*p2=t;左邊*p2還是指向a2變數地址,也就是和變數a2相當。。執行結果就是a2=t;

所以這程式就是兩個變數內容通過指標互換。。p1p2是代表指向地址的指標,並非本身就是地址,而指標本身對於程式設計者都是不可見的。

指標定義指向哪個變數地址,就可以替代這個變數,也就是p1指標可以替代a1,p2指標可以替代a2,卻可以比變數本身更加靈活。

21樓:匿名使用者

地址從未改變,只是把p1p2地址中的內容互換了

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

22樓:

輸出是:8 8,不是9 8

可以理解的

ptr++必須在當前表示式執行完畢後,ptr才執行ptr++。

剛開始ptr指向7

*(ptr++)+=123; 執行完畢,ptr指向8printf("%d %d\n", *ptr, *(ptr++) );

輸出:8 8

ptr在該表示式執行完畢後指向9

我已經執行了,編譯環境是vc6.0

23樓:葉小憐

*(ptr++)+=123; //這句話好像不管用吧 -- 當然有用,a[0]現在就是130

// 執行到這個時候,ptr指向 a[1]printf("%d %d\n", *ptr, *(ptr++));是這樣執行的: c中函式引數是從右往左計算的,先算 *(ptr++),那麼值為8,且指標向右移動一位,然後再算*ptr,就是9了。

這個我是看了其彙編**才敢確定的,以後儘量不要這麼寫吧,就算對,也不容易閱讀,搞這種技巧是沒意思的。實現同一種功能,**能讓別人容易看懂的才叫牛逼。

24樓:匿名使用者

你的問題不在++上,在printf()上面。

printf執行引數時是從後面開始的o(∩_∩)o~

C語言指標問題,C語言指標問題?

文庫精選 內容來自使用者 zzbo2022 讓你不再害怕指標 前言 複雜型別說明 要了解指標,多多少少會出現一些比較複雜的型別,所以我先介紹一下如何完全理解一個複雜型別,要理解複雜型別其實很簡單,一個型別裡會出現很多運算子,他們也像普通的表示式一樣,有優先順序,其優先順序和運算優先順序一樣,所以我總...

C語言指標問題,C語言指標問題。

最大的寶寶 pointer是指標指向的一個值,此時為2,這個值再自加1自然為3。pointer此時還指向值2,減2的含義是指標回退兩個元素,自然指向了值6。指標本身有值,表示它指向的地址,這個值可以運算,表示對地址的修改。而指標指向的值,其實就是位於這個地址所存的值。在彙編以上層次的程式設計中,記憶...

有關C語言的問題

這個函式的要實現的功能是在連結串列l中找到第index個結點後面找到某個結點 這個節點的特點是其資料部分和elemtype e相等,並把這個資料部分拷貝給elemtype eresult 函式返回值為找到的連結串列結點的索引值 如果找到,找不到則返回 1 下面是各個語句的註釋 nt getelem ...