第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

c語言中指針加減問題,求解答。

c語言中指針加減問題,求解答。

C
嗶嗶one 2019-04-04 02:02:22
對指針加一或者減一并不是簡單的加減運算,而是以基類型數(shù)據(jù)所占有的字節(jié)數(shù)為步長的,例如下面:float a[10],*p;p=&a[4];既指針變量p指向了數(shù)組a中下標為4的元素。假如p=2000,那么p+1=2004而不是2001,且p+1指向的是a[5],p+3=2012,p+3指向的是a[7],p+3-p=12。但是兩個指向同一個數(shù)組的指針變量是可以進行大小比較的,兩個指針相減,得到的數(shù)據(jù)是兩個指針之間的元素個數(shù)。如果我將以上例子做如下改變float a[10],*p,*q;p=&a[4],q=&a[7];那q-p=2(a[4]與a[7]之間有兩個元素)與第一個式子p+3-p=12矛盾?。?!請高人指點我的理解哪里錯了
查看完整描述

3 回答

?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

嗯,沒錯,對指針的加減運算是以步長為單位的,不過這是對編譯器來講的。但是對于機器來講,指針也是二進制數(shù)據(jù),在機器內對它們進行運算和一般的數(shù)據(jù)是一樣的,只是因為編譯器知道它們是指針,所以編譯器告訴你的是指針之間的步長。以下是一個測試的程序,應該能說明問題吧,僅供參考:

#include<stdio.h>
#include<stdlib.h>

void main()
{
float a[10],*p,*q;

p=&a[4];
q=&a[7];
printf("p: 0x%0xd\n", p);
printf("q: 0x%0xd\n", q);
printf("p-q: %d\n", p-q);
printf("p+3-p: %d\n", p+3-p);

system("pause");
}



查看完整回答
反對 回復 2019-04-05
  • 3 回答
  • 0 關注
  • 1052 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號