1樓:夢影v清之韻
ptr++如果是int型的就是說讓指標向下移動16個位元組並且認定接下來16個位元組的內容是ptr++這個指標所指向的內容,如果是long型就是改成32個位元組。
ptr=a; /*指標變數重新指向陣列首址*/ 先看個例子int *p2 = 0;他是錯誤的,int *php; *php = 66;也是錯誤的。先宣告瞭php這個指標,然後馬上把值66放到了它的位置——php指標指向哪個變數?答案是沒有。
那麼既然php沒有指向你程式中的任何一個變數,你把66的值放到它指向的位置,那麼肯定也不合法。(實際上,宣告php之後,php會有一個不確定的值。如果根據這個值去在記憶體中找位置,找到的位置很可能是你無權修改的。
所以胡亂賦值不合法。)而 int a; int *p = &a; *p = 66;就是正確的了,因為下面用到了ptr++,所以要先賦值。
*(p1+1)=*p1+1;他是不一樣的,假設有個陣列a[5];p1表示陣列的首地址,*(p1+1)表示陣列的第二個元素的值,即a[1],而*p1+1表示a[0]+1;
2樓:匿名使用者
書上說的沒錯,ptr++在這裡相當於移動一個單位使ptr指向(當前指向的元素的)下一個元素。
為什麼需要重新賦值?
因為後面的語句就是用ptr指向每一個元素,將整個陣列輸出的。所以如果不重新給ptr賦值使其指向陣列a的第一個元素,就會導致輸出結果不可預料(ptr可以指向記憶體中的任何一個地址,因此不重新賦值就會導致ptr繼續移動「指標指向的變數地址加1個變數所佔位元組數」)。
3樓:匿名使用者
指向多維陣列的指標變數
本小節以二維陣列為例介紹多維陣列的指標變數。
一、多維陣列地址的表示方法
設有整型二維陣列a[3][4]如下:
0 1 2 3
4 5 6 7
8 9 10 11
設陣列a的首地址為1000,各下標變數的首地址及其值如圖所示。在第四章中介紹過, c語言允許把一個二維陣列分解為多個一維陣列來處理。因此陣列a可分解為三個一維陣列,即a[0],a[1],a[2]。
每一個一維陣列又含有四個元素。例如a[0]陣列,含有a[0][0],a[0][1],a[0][2],a[0][3]四個元素。 陣列及陣列元素的地址表示如下:
a是二維陣列名,也是二維陣列0行的首地址,等於1000。a[0]是第一個一維陣列的陣列名和首地址,因此也為1000。*(a+0)或*a是與a[0]等效的, 它表示一維陣列a[0]0 號元素的首地址。
也為1000。&a[0][0]是二維陣列a的0行0列元素首地址,同樣是1000。因此,a,a[0],*(a+0),*a,&a[0][0]是相等的。
同理,a+1是二維陣列1行的首地址,等於1008。a[1]是第二個一維陣列的陣列名和首地址,因此也為1008。 &a[1][0]是二維陣列a的1行0列元素地址,也是1008。
因此a+1,a[1],*(a+1),&a[1][0]是等同的。 由此可得出:a+i,a[i],*(a+i),&a[i][0]是等同的。
此外,&a[i]和a[i]也是等同的。因為在二維陣列中不能把&a[i]理解為元素a[i]的地址,不存在元素a[i]。
c語言規定,它是一種地址計算方法,表示陣列a第i行首地址。由此,我們得出:a[i],&a[i],*(a+i)和a+i也都是等同的。另外,a[0]也
可以看成是a[0]+0是一維陣列a[0]的0號元素的首地址, 而a[0]+1則是a[0]的1號元素首地址,由此可得出a[i]+j則是一維陣列a[i]的j號元素首地址,它等於&a[i][j]。由a[i]=*(a+i)得a[i]+j=*(a+i)+j,由於*(a+i)+j是二維陣列a的i行j列元素的首地址。該元素的值等於*(*(a+i)+j)。
[explain]#define pf "%d,%d,%d,%d,%d,\n"
main();
printf("%d,%d\n",a[1]+1,*(a+1)+1);
printf("%d,%d\n",*(a[1]+1),*(*(a+1)+1));}
C語言指標問題,C語言指標問題?
文庫精選 內容來自使用者 zzbo2022 讓你不再害怕指標 前言 複雜型別說明 要了解指標,多多少少會出現一些比較複雜的型別,所以我先介紹一下如何完全理解一個複雜型別,要理解複雜型別其實很簡單,一個型別裡會出現很多運算子,他們也像普通的表示式一樣,有優先順序,其優先順序和運算優先順序一樣,所以我總...
C語言指標問題,C語言指標問題。
最大的寶寶 pointer是指標指向的一個值,此時為2,這個值再自加1自然為3。pointer此時還指向值2,減2的含義是指標回退兩個元素,自然指向了值6。指標本身有值,表示它指向的地址,這個值可以運算,表示對地址的修改。而指標指向的值,其實就是位於這個地址所存的值。在彙編以上層次的程式設計中,記憶...
c語言函式指標定義,C語言函式指標定義
韌勁 函式指標 在程式執行中,函式 是程式的演算法指令部分,它們和陣列一樣也佔用儲存空間,都有相應的地址。可以使用指標變數指向陣列的首地址,也可以使用指標變數指向函式 的首地址,指向函式 首地址的指標變數稱為函式指標。1 函式指標定義 函式型別 指標變數名 形參列表 函式型別 說明函式的返回型別,由...