娓娓道來c指標 (7)指標運算,娓娓道來指標

來源:互聯網
上載者:User

娓娓道來c指標 (7)指標運算,娓娓道來指標

                             (7)指標運算

在前幾篇文章中,我們已經見過指標運算的使用情境,並多次使用指標運算來進行驗證。這裡我們來特別地總結下,指標運算的本質含義。

在c語言中,假設p、pa、pb都是某種類型的指標,這樣的運算被稱為指標運算:

其本質是1.。2.,得到的是邏輯儲存單元數,而不是簡單的物理位元組數。代碼驗證
int main(void){int array[] = {1, 2, 3};int *pa = array;int *pb = array + 3;printf("sizeof(pa)...%d\n", sizeof(pa));printf("pb-pa...%d\n", pb - pa);printf("((unsigned)pb-(unsigned)pa)/sizeof(pa)...%d\n", ((unsigned)pb - (unsigned)pa) / sizeof(pa));return 0;}
運行

當然,把pa-pb解釋成((char*)pa-(char*)pb)/sizeof(pa)也是可以的。
指標運算總結指標儲存的是地址,地址本質是一個unsigned類型的整數,對於p+1,並不是簡單的把p的值往前移動一個位元組。一句話: 指標運算緊緊依賴於指標的類型。所以指標運算中,清楚指標的類型是重要的。這也是為什麼:可以用指標運算來測試指標類型。
必須指出,pa+pb這樣的運算是不存在的!


專欄目錄:C指標


C語言指標自增自減運算

#include <stdio.h>
main()
{
int a[]={1,2,3,4,5};
int *p=NULL;
p=a;
printf("%d,",*p); //p=a,取出1
printf("%d,",*(++p)); //p=a+1,取出2
printf("%d,",*++p); //p=a+2,取出3
printf("%d,",*(p--)); //先取出3,後p-1=a+1
printf("%d,",*p++); //先取出2,後p+1=a+2
printf("%d,",*p); //取出3
printf("%d,",++(*p)); //取出3,3+1=4
printf("%d,",*p); //確實是4,但不知原因
getch();
}
,*(++p)和*++p沒有多大區別
我的驗證
%d,P值
1,1245036
2,1245040
3,1245044
3,1245040
2,1245044
3,1245044
4,1245044
4,1245044
Press any key to continue
 
c語言中指標加減問題,解答

首先:
float a[10],*p,*q;
p=&a[4],q=&a[7];
那q-p=2(a[4]與a[7]之間有兩個元素) ***這裡就不對了,q-p = 3 不是等於2,
可以用printf("%d",q-p);看看。

p+3-p = 12 是地址按“位元組”排列的位置差,表示p+3和p之間有12個位元組
q-p = 3 表示q和p之間有3個float類型的資料,每個佔4位元組,3x4 = 12 和上面的結果一致
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.