找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2000|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

*(unsigned char *)&s 結(jié)構(gòu)體問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1041297 發(fā)表于 2022-8-11 13:18 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式

struct test_s
  {
    unsigned char a;
    int b;
  };
  struct test_s s;
  s.a='a';
  printf("a=%c\n",s.a);
  printf("a=%c\n",*(unsigned char *)&s);  //兩個printf打印的結(jié)果都是一樣的
這里 &s為 struct test_s * 類型指針
請問大伙,為什么&s是struct test_s * 類型指針,它不是struct test_s類型嗎?



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:248705 發(fā)表于 2022-8-11 16:31 | 只看該作者
指針才指向地址,&運(yùn)算符在變量前跟變量結(jié)合表示取地址,可以想一下,如果&s還是struct test_s類型,那么&運(yùn)算符有何意義?
回復(fù)

使用道具 舉報

板凳
ID:139866 發(fā)表于 2022-8-11 17:23 | 只看該作者
s是test_s類型的結(jié)構(gòu)體,&s是s的地址,指針是指向s的地址,你連指針的概念都沒弄懂
回復(fù)

使用道具 舉報

地板
ID:883242 發(fā)表于 2022-8-11 17:43 | 只看該作者
能問出“為什么&s是struct test_s * 類型指針”的,回頭看教科書吧,指望論壇有人寫幾千個字給你說明是不現(xiàn)實(shí)的。
回復(fù)

使用道具 舉報

5#
ID:939553 發(fā)表于 2022-8-11 19:16 | 只看該作者
結(jié)構(gòu)體的首地址也是結(jié)構(gòu)體第一個數(shù)據(jù)的地址,所以一樣的
回復(fù)

使用道具 舉報

6#
ID:401564 發(fā)表于 2022-8-12 06:49 | 只看該作者
你的另外幾個問題是定時器的高8位和低8位的問題和8位機(jī)跟32位機(jī)的區(qū)別
由此看來,我不覺得你能操控指針和結(jié)構(gòu)體
新手更應(yīng)該做的是流水燈或者定時器閃燈之類的
程序從10行代碼,慢慢的增加到11行,然后是12行,然后慢慢的到100行,一千行,再然后,技術(shù)到家了,代碼就開始慢慢的減少了,因?yàn)槟憧赡軐W(xué)會了更高級的函數(shù)或者算法
而不是像你這樣,跳著學(xué)
回復(fù)

使用道具 舉報

7#
ID:879348 發(fā)表于 2022-8-12 08:18 | 只看該作者
取地址,很好理解吧
回復(fù)

使用道具 舉報

8#
ID:970221 發(fā)表于 2022-8-12 10:13 來自觸屏版 | 只看該作者
這是個C語言的基本問題。指針包括兩個要素:地址數(shù)值、該地址的數(shù)據(jù)類型。
S是個結(jié)構(gòu)體類型,那么&S自然就是該結(jié)構(gòu)體類型的指針,其地址數(shù)值為結(jié)構(gòu)體數(shù)據(jù)的入口地址。在你的語句中用強(qiáng)制類型轉(zhuǎn)換,把它轉(zhuǎn)換成了char類型指針。之后再取地址內(nèi)容,自然取的就是char類型。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表