網域名稱俱樂部


返回   網域名稱俱樂部 > 電腦與網路技術 > 電腦網路相關技術 > 一般軟體與網路使用討論

回覆
 
主題工具
  #1  
舊 2014-06-09, 09:25 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 23,055
預設 C語言中指標位址增加的問題

有一個範例是表現出不同型的指標當其增加一個單位時,因型態不同而增加不同位元數。

如下:

#include <stdio.h>

int main(void)
{
char *cp,ch;
int *ip,i;
float *fp,f;
double *dp,d;

cp=&ch;
ip=&i;
fp=&f;
dp=&d;

printf("%p %p %p %p\n",cp,ip,fp,dp);//印出目前的各指標記憶體的位址;

cp++;
ip++;
fp++;
dp++;

printf("%p %p %p %p\n",cp,ip,fp,dp);//印出各加一單位之後各指標記憶體的位址;

return 0;
}

結果印出來的答案如下:
000000000022FE3F 000000000022FE38 000000000022FE34 000000000022FE28
000000000022FE40 000000000022FE3C 000000000022FE38 000000000022FE30

我知道它們都是以十六進位的方式來看,我看得有點頭大。但以最後一組為例,000000000022FE28然後變成000000000022FE30,這組照說是反映出double *dp這個指標和它++之後的位址變化,書上說double的增加一個單位應是增加8個位元組。可是這二組位址似乎只差了2,怎麼看也不像是差了8個位元組啊?

請先進指教一下。
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #2  
舊 2014-06-09, 09:30 PM
sunhouse sunhouse 目前離線
進階會員
 
註冊日期: 2002-06-29
住址: 地球
文章: 521
預設

會不會 跟 parity check 有關啊?
我是來亂說的... brain storm 一下 ^_^!
__________________
幫忙賺些奶粉錢, TKS! --- www.stock.com.tw
回覆時引用此篇文章
  #3  
舊 2014-06-09, 09:33 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 23,055
預設

引用:
作者: sunhouse 查看文章
會不會 跟 parity check 有關啊?
我是來亂說的... brain storm 一下 ^_^!
parity check?我聽嘸。

我想這習題主要目的是學生看一下各型態的指標每++之後,所增加的byte數是不同的,所以應是很單純的位址+byte數吧?
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #4  
舊 2014-06-09, 10:00 PM
sunhouse sunhouse 目前離線
進階會員
 
註冊日期: 2002-06-29
住址: 地球
文章: 521
預設

我以為是因為 夾了 除錯 演算碼,所以 才會位數不一樣
以前 做 通訊協定 protocol, 以為是 8bit,
結果要算 10bit, 才對, 因為 每一組封包, 前後 多了1個檢查碼!

這次 我們大概是 雞同鴨講 ^^
__________________
幫忙賺些奶粉錢, TKS! --- www.stock.com.tw
回覆時引用此篇文章
  #5  
舊 2014-06-09, 10:25 PM
best-url 的頭像
best-url best-url 目前離線
站務管理
 
註冊日期: 2003-08-11
住址: IDN Club
文章: 9,925
發送 MSN 消息給 best-url
預設

引用:
作者: sunhouse 查看文章
這次 我們大概是 雞同鴨講 ^^

講得太深, 對於 自學的 哈啦 鴨 可能 不太理解
(但 哈啦 這方面 很有慧根, 應該還是會 想的通)

但對我這隻 番鴨
就真的是 人同豬講 - 絕對是白講了
回覆時引用此篇文章
  #6  
舊 2014-06-09, 10:27 PM
robowang robowang 目前離線
進階會員
 
註冊日期: 2004-05-22
文章: 372
預設

000000000022FE28然後變成000000000022FE30, 確實是加了8個byte, 沒錯
注意! 這是16進位表示法, 最後二碼的 30(16進制) 減去 28(16進制), 確實是 8
哈大是誤以為它們30跟28是十進制了
回覆時引用此篇文章
  #7  
舊 2014-06-09, 10:44 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 23,055
預設

引用:
作者: best-url 查看文章
講得太深, 對於 自學的 哈啦 鴨 可能 不太理解
(但 哈啦 這方面 很有慧根, 應該還是會 想的通)

但對我這隻 番鴨
就真的是 人同豬講 - 絕對是白講了
又是鴨又豬的,豪哥一下子又是禽又是獸? 而我則當了禽?

引用:
作者: robowang 查看文章
000000000022FE28然後變成000000000022FE30, 確實是加了8個byte, 沒錯
注意! 這是16進位表示法, 最後二碼的 30(16進制) 減去 28(16進制), 確實是 8
哈大是誤以為它們30跟28是十進制了
哈,原來如此。many thanks!!
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #8  
舊 2014-06-19, 09:02 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 23,055
預設

引用:
作者: robowang 查看文章
000000000022FE28然後變成000000000022FE30, 確實是加了8個byte, 沒錯
注意! 這是16進位表示法, 最後二碼的 30(16進制) 減去 28(16進制), 確實是 8
哈大是誤以為它們30跟28是十進制了
28->29->2A->2B->2C->2D->2E->2F->30
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
回覆

主題工具

發文規則
不可以發表新主題
不可以發表回覆
不可以上傳附件
不可以編輯自己的文章

啟用 BB 代碼
論壇啟用 表情符號
論壇啟用 [IMG] 代碼
論壇禁用 HTML 代碼



所有時間均為 +8。現在的時間是 08:06 PM


本站主機由網易虛擬主機代管
Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.