struct和typedef struct在C與C++中用法

struct和typedef struct

分三塊來講述:
  1 首先://注意在C和C++里不同
    在C中定義一個結構體類型要用typedef:
    typedef struct Student
    {
    int a;
    }Stu;
    于是在聲明變量的時候就可:Stu stu1;(如果沒有typedef就必須用struct Student stu1;來聲明)
    這里的Stu實際上就是struct Student的別名。Stu==struct Student
    另外這里也可以不寫Student(于是也不能struct Student stu1;了,必須是Stu stu1;)
    typedef struct
    {
    int a;
    }Stu;
    但在c++里很簡單,直接
    struct Student
    {
    int a;
    };    
    于是就定義了結構體類型Student,聲明變量時直接Student stu2;
======================================================================================

  2.其次:
    在c++中如果用typedef的話,又會造成區別:
    struct?? Student???
    {???
    int?? a;???
    }stu1;//stu1是一個變量??

?
    typedef?? struct?? Student2???
    {???
    int?? a;???
    }stu2;//stu2是一個結構體類型=struct Student??

?
    使用時可以直接訪問stu1.a
    但是stu2則必須先?? stu2 s2;
    然后?????????????? s2.a=10;
======================================================================================

  3 掌握上面兩條就可以了,不過最后我們探討個沒多大關系的問題
    如果在c程序中我們寫:
    typedef struct??
    {
    int num;
    int age;
    }aaa,bbb,ccc;
    這算什么呢?
    我個人觀察編譯器(VC6)的理解,這相當于
    typedef struct??
    {
    int num;
    int age;
    }aaa;
    typedef aaa bbb;
    typedef aaa ccc;
    也就是說aaa,bbb,ccc三者都是結構體類型。聲明變量時用任何一個都可以,在c++中也是如此。但是你要注意的是這個在c++中如果寫掉了typedef關鍵字,那么aaa,bbb,ccc將是截然不同的三個對象。

    //此處不是很理解。

  ?

?

?

    typedef struct和struct的區別:

?

?

    typedef struct tagMyStruct
    {?
     int iNum;
     long lLength;
    } MyStruct;

    上面的tagMyStruct是標識符,MyStruct是變量類型(相當于(int,char等))。

?

?

    這語句實際上完成兩個操作:

      1) 定義一個新的結構類型

    struct tagMyStruct
    {  ?
     int iNum;?
     long lLength;?
    };

  分析:tagMyStruct稱為“tag”,即“標簽”,實際上是一個臨時名字,不論是否有typedefstruct 關鍵字和tagMyStruct一起,構成了這個結構類型,這個結構都存在。

  我們可以用struct tagMyStruct varName來定義變量,但要注意,使用tagMyStruct varName來定義變量是不對的,因為struct 和tagMyStruct合在一起才能表示一個結構類型。

  2) typedef為這個新的結構起了一個名字,叫MyStruct。

    typedef struct tagMyStruct MyStruct;

  因此,MyStruct實際上相當于struct tagMyStruct,我們可以使用MyStruct varName來定義變量。

  2.

    typedef struct tagMyStruct
    {?
     int iNum;
     long lLength;
    } MyStruct;

    在C中,這個申明后申請結構變量的方法有兩種:

    (1)struct tagMyStruct 變量名

    (2)MyStruct 變量名

    在c++中可以有

    (1)struct tagMyStruct 變量名

    (2)MyStruct 變量名

    (3)tagMyStruct 變量名

轉自:https://www.cnblogs.com/qyaizs/articles/2039101.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255333.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255333.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255333.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【數據庫學習】——Python實現mysql數據庫SQL文件生成和導入

目錄 1、將mysql數據導出到SQL文件中(數據庫存在的情況) 2、將現有的sql文件數據導入到數據庫中(前提數據庫存在) 3、利用Navicat導出SQL文件和導入SQL文件 1)從數據庫導出SQL文件 2)導入SQL文件到數據…

lfcp——PB使用

場景:記錄以備忘。 1 直接說明 pb連接說明:目前項目共有性能、功能、業務、聯調四個環境。所以pb可以連接四個不同的數據庫。1.copy一份pb程序,修改main.ini文件中的DBCONNECT/DBCONNECT2位new,DBNAME/DBNAME2為oracle數據源中的源…

【重磅】Google官方推出了免費的、中文的、機器學習初級課程。

2019獨角獸企業重金招聘Python工程師標準>>> 機器學習(Machine Learning, ML)是一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、算法復雜度理論等多門學科。它是人工智能的核心,是使計算機具有智能的根本途徑,其應用遍及…

市面上常見arduino版本比較

http://arduino.cc/en/Main/Products 詳細鏈接 如果是入門,那么首選UNO R3,方便又省心 如果不是特殊要求,不建議購買2560,因為貴啊 nano是塊很好的控制器,買不買隨你咯 非特殊場合使用不建…

leetcode-114. Flatten Binary Tree to Linked List

Given a binary tree, flatten it to a linked list in-place. For example,Given 1/ \2 5/ \ \3 4 6The flattened tree should look like: 1\2\3\4\5\6思路:遞歸處理,引用二叉鏈表的思想,使用pre記錄上一個分支的指針。Accepted Co…

HALCON示例程序autobahn高速公路車道識別程序剖析

HALCON示例程序autobahn高速公路車道識別程序剖析 小哥哥小姐姐覺得有用點個贊唄! 示例程序源碼(加注釋) *關閉halcon窗口的實時更新 dev_update_window (‘off’) *關閉halcon圖形窗口 dev_close_window () *打開圖形窗口 *dev_open_win…

CSS中的未定義行為,瀏覽器的差異(一)

今天看了張鑫旭大佬的新書的有感吧,記錄一下。 Web標準未對一些場景做出明確規范,所以各大瀏覽器廠家只能根據自己的理解和喜好去實現,表現差異不是瀏覽器的bug,用計算機領域的術語描述為"未定義行為"。 比如一個例子&a…

KVC 和 KVO

作者 沖破繭縛 2015.08.28 16:12* 寫了3967字,被8人關注,獲得了14個喜歡KVC 和 KVO 字數363 閱讀32 評論0 喜歡0KVC (Key Value Coding),鍵值編碼,通過鍵值(字符串)來訪問屬性的機制,來間接修改…

Atmel megaAVR控制器 串行引導Bootloader

開始研究下Bootloader的代碼結構 2015.1.9 粗略看了下,Bootloader主要做了下板卡的初始化 -----> 然后進入for( ; ; )死循環 -----> 循環刷新串口數據 -----> 根據數據做出不同應答 -----> 如果有寫數據,則將數據存入buffer …

MapReduce入門2-流量監控

3、流量監控匯總(使用LongWritable實現) hdfs文件路徑:/tmp/flow.txt 查看文件內容: 13770759991 50 100 25 400 13770759991 800 600 500 100 13770759992 400 300 250 1400 13770759992 800 1200 600 900字符串含義:…

【fiddler學習問題記錄】——手機端證書下載頁打不開、無法將此證書安裝(已解決)

目錄 1、手機端下載頁打不開 解決方法1)電腦端——將網絡設置成公用(親測有效) 解決方法2)手機端將fiddler設置為信任應用,不被攔截 (未試) 2、無法將此證書安裝 方法一:修改證書…

HALCON示例程序ball電路板焊點識別、檢測、測量程序剖析

HALCON示例程序ball電路板焊點識別、檢測、測量程序剖析 示例程序源碼(加注釋) 介紹: ball.hdev: Inspection of Ball Bonding *halcon窗口實時更新關閉 dev_update_window (‘off’) *halcon關閉所有窗口 dev_close_window () *halcon打開…

舵機的原理和控制

控制信號由接收機的通道進入信號調制芯片,獲得直流偏置電壓。它內部有一個基準電路,產生周期為20ms,寬度為1.5ms的基準信號,將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。最后,電壓差的正負輸出…

HDFS清理壞塊

報錯 Failed with exception java.io.IOException:org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block: BP-1921057509-192.168.57.129-1517160177567:blk_1073741930_1106 file/user/hive/warehouse/db_hive.db/student/student.txt Time taken: 0.104 se…

如何在PowerDesigner將PDM導出生成WORD文檔或者html文件

a) 使用PowerDesigner打開pdm文件 b) 點擊Report Temlates 制作模板 點擊PowerDesigner菜單欄“Report” -> “Report Templates” c) 選擇模板數據項 完成步驟a),得到如下界面,左右2個區,Aavailable區…

【軟件測試】——基礎篇(軟件測試技術體系、過程管理)

目錄 軟件測試技術體系 軟件測試過程管理?編輯 接口測試用例設計 手機端測試流程?編輯 軟件測試技術體系 軟件測試過程管理 接口測試用例設計 手機端測試流程

vue 的常用模塊安指令(持續記錄)

# 全局安裝 vue-cli $ cnpm install --global vue-cli# 創建一個基于 webpack 模板的新項目 $ vue init webpack my-project # 路由管理模塊 $ npm install vue-router --save # 狀態管理模塊 $ npm install vuex --save # 網絡請求模塊 $ npm install vue-resource --save # 停…

HALCON基于形狀匹配詳解

HALCON基于形狀的模板匹配詳細說明 很早就想總結一下前段時間學習HALCON的心得,但由于其他的事情總是抽不出時間。去年有過一段時間的集中學習,做了許多的練習和實驗,并對基于HDevelop的形狀匹配算法的參數優化進行了研究,寫了一…

俄羅斯:自由軟件在這里生根

2008年6月15日,我在“俄羅斯:自由軟件在這里起飛“一文中介紹了自由軟件在俄羅斯的發展情況。現在,許多年過去了,實際情況如何呢? 回顧以往,俄羅斯境內自由軟件的精英們,在2001年組建了ALTLinux…

小米出招黑科技,5S或成全球首款”Under glass“指紋識別手機

這一次,小米PK蘋果,小米勝。 不得不說,最近的手機圈真是熱鬧,繼三星Note 7爆炸、蘋果iPhone 7發布一度成為新聞熱點之后,小米又來暗戳戳地搶風頭了。 最近小米即將發布的兩款新旗艦消息扎堆,其中基本已經確…