1. 程式人生 > >typedef關鍵字與結構體、結構體指標的定義

typedef關鍵字與結構體、結構體指標的定義

一、使用typedef定義結構體

typedef用來定義新的資料型別,通常typedef與結構體的定義配合使用。使用typedef的目的使結構體的表達更加簡練(所以說typedef語句並不是必須使用的)。

定義一個名字為TreeNode的結構體型別(現在並沒有定義結構體變數,並不佔用記憶體空間):

struct TreeNode
{
        int Element;
        struct TreeNode* LeftChild;
        struct TreeNode* RightChild;
};

為結構體起一個別名Node,這時Node就等價於struct TreeNode

typedef struct TreeNode Node;

將結構體的定義和typedef語句可以連在一起寫:

typedef struct TreeNode
{
        int Element;
        struct TreeNode* LeftChild;
        struct TreeNode* RightChild;
}Node;
  • 注意不要與“定義結構體型別的同時定義結構體型別變數”混淆:
使用typedef關鍵字定義結構體型別 定義結構體型別的同時定義結構體型別變數
typedef struct student
{
        int age;
        int height;
}std;

//std相當於struct student
struct student
{
        int age;
        int height;
}std1,std2;

//定義了student資料型別的結構體和std1
、std2結構體變數

二、使用typedef定義結構體指標

定義一個名為TreeNode的結構體,和指向該結構體型別的指標PtrToTreeNode(不使用typedef):

struct TreeNode
{
        int Element;
        struct TreeNode* LeftChild;
        struct TreeNode* RightChild;
};

struct
TreeNode *PtrToTreeNode; //定義指標

使用typedef關鍵字用一個單詞Node代替struct TreeNode,並定於指向該結構體型別的指標PtrToTreeNode:

struct TreeNode
{
        int Element;
        struct TreeNode* LeftChild;
        struct TreeNode* RightChild;
};
typedef struct TreeNode Node;   //用Node代替struct TreeNode

Node *PtrToTreeNode;            //定義指標

將結構體的定義typedef連在一起寫,再次縮短程式碼:

typedef struct TreeNode
{
        int Element;
        struct TreeNode* LeftChild;
        struct TreeNode* RightChild;
}Node;                          //定義結構體並用Node代替struct TreeNode
Node *PtrToTreeNode;            //定義指標

還可以繼續縮短程式碼,直接定義了指向結構體型別的指標,但是這種寫法沒有為結構體起一個別名。

typedef struct TreeNode
{
        int Element;
        struct TreeNode* LeftChild;
        struct TreeNode* RightChild;
} *PtrToTreeNode;               //直接定義指標
  • 在定義結構體時,省略struct後面的結構體名也是可以的,但是由於沒有名字,操作(如定義結構體變數)只能在定義的同時進行。(給它起個名字就那麼難麼…qwq)

相關推薦

typedef關鍵字結構結構指標定義

一、使用typedef定義結構體 typedef用來定義新的資料型別,通常typedef與結構體的定義配合使用。使用typedef的目的使結構體的表達更加簡練(所以說typedef語句並不是必須使用的)。 定義一個名字為TreeNode的結構體型別(現在並沒

Android JNI程式設計(六)——C語言函式指標Unition聯合體列舉Typedef別名結構結構指標

一:函式指標 1.函式指標顧名思義就是定義一個指標變數指向一個函式,和一級指標並沒有很大的區別我們看如下程式碼就很清楚的知道了 #include<stdio.h> #include<stdlib.h> //定義一個函式 in

結構公用枚舉

std 例如 每一個 指針變量 .... 需要 整體 ont 判斷 一.結構體類型  1.結構體變量的定義與使用   ? 定義結構體變量的方式     ? 先申明結構體類型再定義變量名       struct stu  //stu:結構體類型名       {      

字節對齊-------結構共用

C/C++字節對齊結構體字節對齊:(結構體成員的數據類型為基本數據類型(int,double,char,short,long等))結構體的總大小是結構體成員中最寬基本數據類型大小的整數倍#include<iostream>using namespace std;struct S0{int a;ch

結構共用。面試必用

地址 類型 有一個 不同類 作用域 圖片 將不 har 存儲 結構體:將不同類型得數據有序地組合在一起,構造出一個新的數據類型,這種形式稱為結構體。 結構體是多種類型組合得數據類型。 還有一個比較重要得知識點:結構體類型得靜態方法 在結構體中說明得靜態成員屬於引用性

【C/C++開發】函式使用結構結構指標作為返回值分析

函式使用結構體、結構體指標作為返回值分析 32位機,gcc編譯器 使用結構體作為返回值 分析反彙編程式碼可知,當被呼叫的子函式返回值為結構體的時候,呼叫函式將分配一段空間用於存放返回的結構體(使用一個結構體變數接受返回值),並將這段空間的地址作為呼叫時的引數壓棧。子程式不負責對要返回的結構體分

C語言(三 字串結構共用輸入輸出)

字串 字串是儲存了一些字元,最後以null(’/0’)結尾的一維字元陣列。 char str[6] = {'h','e','l','l','o','/0'}; char str[ ] = "hello" ; 還有一些字串操作函式: 1、strcpy(s1,s2) 複製s2到s1 2

結構共用和列舉型別(一)

定義描述三維座標點(x,y,z)的結構體型別變數,完成座標點的輸入和輸出,並求出兩點之間的距離   程式碼如下: #include <iostream> #include <cmath> #define N 2 using namespace std; stru

C程式設計 | 結構共用和連結串列

一、定義和使用結構體變數 1、自己建立結構體型別 C語言允許使用者自己建立由不同型別資料組成的組合型的資料結構,它稱為結構體(structre)。 例如在程式中要用的如下圖所示的資料結構,可以在程式中自己建立一個結構體型別: struct Student

結構結構記憶體對齊

1、結構體 1.1、概述 在C語言中,除了常見的基本資料型別(整數型別short、int、long和浮點型別float、double)外,還有派生型別,如指標型別、陣列型別、結構型別、共用體型別等。 結構體是基本資料型別不能滿足需求時,使用者自己指定的一種資料結

結構結構變數以及指向結構變數的指標筆記

結構體:描述結構的組織形式,不分配記憶體 結構體變數定義:先定義結構體型別,再定義結構體變數 結構體變數的定義主要有3種形式 結構體型別與結構體變數概念的區別: (1)型別:不分配記憶體 變數:分配記憶體 (2)型別:不能賦值、存取、運算 變數:可以進行賦值、存

C結構共用列舉

一、結構體三種定義方式 1、先宣告結構體型別,再定義變數名 struct student { int num; char name[20]; char sex; int age; char addr[30]; } struct student student1

1-C語言之結構共用列舉

一、關鍵字說明         C語言有32個關鍵字,C語言通過關鍵字的使用使編譯器進行相關的操作          結構體對應關鍵字struct          共用體(聯合體)對應的關鍵字是union          列舉型別對應的關鍵字是enum 二、結構

iOS 自定義結構結構轉換成物件

1、新建一個頭檔案,如下程式碼: #ifndef Header_h #define Header_h struct MyStruce{     char *name;//(指標形式)     char *address;     CGFloat age;

C語言之結構共用列舉

結構體的基本格式如下:#include <stdio.h> struct student //結構體型別的說明與定義分開。 宣告 { int age; /*年齡*/ float score; /*分數*/ char sex; /*性別*/ }; int main() {

golang基礎-結構結構連結串列前後插入節點新增刪除

結構體定義 刪除節點 新增節點 結構體定義 struct 用來自定義複雜資料結構 struct裡面可以包含多個欄位(屬性) struct型別可以定義方法,注意和函式的區分 struct型別是值型別 struct型別可以

C語言中利用共用結構位域實現位操作

編寫過51(MCU)程式的同學都知道51架構的MCU支援位操作,這是一個很方便的特性,在讀取/修改暫存器某位的值時非常方便快捷。但其他架構的MCU大多都不支援該特性,即不支援位操作,所在在對暫存器中某一位進行操作的時候都是and/or兩個操作共同使用,在編寫程式時非常麻煩。

09.go語言結構值接受者/指標接受者指標和值

1.結構體 package main import ( “log” ) //結構體 type user struct { name string em

結構結構指標作為函式返回值

函式使用結構體、結構體指標作為返回值分析 32位機,gcc編譯器 使用結構體作為返回值 分析反彙編程式碼可知,當被呼叫的子函式返回值為結構體的時候,呼叫函式將分配一段空間用於存放返回的結構體(使用一個結構體變數接受返回值),並將這段空間的地址作為呼叫時

openhtmltopdf 支持自定義

pan static ren -s 默認 多個 repl text 優先級 一、支持自定義字體 private static void renderPDF(String html, OutputStream outputStream) throws Exception {