知識社群
登入
中文(台灣)
English(US)
Q&A
線上人數:
401
回首頁
最新活動
(34)
公佈欄
最新公告
近期課程
技術專欄
Android
嵌入式Linux
韌體設計
FPGA / Verilog
站上資源
線上教學
文件總覽
廠商徵才
專業論壇
(1315)
推廣成果
學員專題
Android I/O Workshop
Android 企業產訓專班
活動花絮
(58)
專班學員資訊平台
102年嵌入式軟韌體設計工程師養成班
102年JAVA程式設計班
102Linux網路工程師-LPI認證養成班
嵌入式Linux就業班第二梯次
嵌入式Linux就業班第三梯次
101年 Android設計班(2)
101年 Android設計班(1)
公告
艾鍗學院成立滿十週年了!十年一遇的超值回饋,獻給堅持學習的你~
(03-12)
【2019下半年課程行事曆】政府+企業雙重補助,AI人才養成計劃開跑
(07-10)
IT TRAINING 2019上半年最新技術培訓一覽
(03-13)
[
more
]
最新消息
文件分類
[
總覽
]
廠商徵才資訊
(215)
學員專題成果
(31)
研討會活動專區
(5)
Android 專欄
(19)
活動簡報檔
(2)
線上教學 Training Video
(24)
韌體設計相關
(17)
Embedded LInux 專欄
(54)
Raspberry Pi
(4)
FPGA/Verilog 專欄
(14)
小品文章
(37)
未分類文件
(28)
101年 Android 應用軟體設計班
(4)
基礎C程式&資料結構
(8)
嵌入式Linux就業班第二梯次
(20)
101年臺北市政府勞工局職業訓練中心-Android APP 軟體開發人才培訓就業班
(16)
102年Linux網路工程師-LPI認證養成班
(9)
102年JAVA程式設計班
(2)
102年嵌入式軟韌體設計工程師養成班
(6)
Access VBA
(5)
Excel VBA
(4)
產業訊息
(2)
PCB Layout
(7)
電子電路
(6)
專班文件區
嵌入式Linux就業班第三梯次
(13)
社群資訊
訪客: 3178861
文章: 557
討論: 1315
公告: 31
容量: 剩餘
2.4 GB
(4 GB)
閱讀權限: 開放
分類:
教育學習 / 軟體系統
版主: 艾鍗學院
副版主: 無
位置:
艾鍗學院 Blog
>
專業論壇
>
討論
pointer 跟 struct 以及 指標轉型 的問題
(Leo,
goodog008@gmail.com
, 2013-12-12 16:02)
1樓
大家好:
目前我有一個疑問,
我定了ㄧ個結構(Struct):
#define unsigned long
uint32;
#define unsigned char
uint8;
typedef struct _Frame{
uint32
ID;
uint8
Number;
uint8
Message[8];
}Frame;
然後我也建立了ㄧ個結構的陣列:
Frame DATAFRAME[8];
透過一個結構指標將直傳到Function
Frame *Mesg;
Mesg=*(DATAFRAME+2);
func(ptr,MESG);
想要透過Function直接改變這個結構陣列的內容,
可是我不確定這樣的寫法能不能正確的修改結構的陣列的內容。
ptr1 = (uint32 *) &(MESG->ID);
ptr2 = (uint8 *) &(MESG->Number);
ptr3 = (uint8 *) (MESG->Message);
這轉型後這些指標(*ptr1, *ptr2, *ptr3)指向的位址
與結構(MESG->ID, MESG->Number, MESG->Message[0])的位址ㄧ樣的嗎?
請大大指點迷津。
函數內容為:
void func(uint8 *ptr,Frame *MESG)
{
uint32 *ptr1;
uint8 *ptr2;
uint8 *ptr3;
ptr1 = (uint32 *) &(MESG->ID);
ptr2 = (uint8 *) &(MESG->Number);
ptr3 = (uint8 *) (MESG->Message);
*ptr1 = *ptr;
ptr++;
*ptr1 |= (*ptr<<8);
ptr++;
*ptr2 = *ptr;
for (i=0;i<8;i++)
{
ptr++;
*(ptr3+i) = *ptr;
}
}
(Leo,
goodog008@gmail.com
, 2013-12-12 16:08)
2樓
更正一下,
透過一個結構指標將直傳到Function
Frame *Mesg;
Mesg=(DATAFRAME+2); //結構的陣列[2]位址給Mesg
func(ptr,Mesg);
(Leo,
goodog008@gmail.com
, 2013-12-12 16:41)
3樓
總而言之 我的問題如下:
有問題的部份是:
ptr1 = (uint32 *) &(MESG->ID);
//MESG->ID 的位址轉換給ptr1
ptr2 = (uint8 *) &(MESG->Number);
//MESG->Number 的位址轉換給ptr2
ptr3 = (uint8 *) (MESG->Message);
//MESG->Message[0] 的位址轉換給ptr3
上述的位址讀取是不是正確的?
例如 :
*ptr1 內容 是不是跟MESG->ID 在一樣的記憶體位址,
*ptr2 內容 是不是跟MESG->Number 在一樣的記憶體位址,
*(ptr3+1)的內容是不是跟MESG->Message[1]是ㄧ樣的。
(joseph, 2013-12-14 23:19)
4樓
*ptr1 內容 是不是跟MESG->ID 在一樣的記憶體位址,
*ptr2 內容 是不是跟MESG->Number 在一樣的記憶體位址,
*(ptr3+1)的內容是不是跟MESG->Mesrsage[1]是ㄧ樣的。
以上都是對的!所以你要問的是??
(Leo,
goodog008@gmail.com
, 2013-12-15 08:23)
5樓
那我的問題已經解決了
*ptr2 內容 是不是跟MESG->Number 在一樣的記憶體位址,
*(ptr3+1)的內容是不是跟MESG->Mesrsage[1]是ㄧ樣的。
以上都是對的!所以你要問的是??