1. 程式人生 > >C語言- 儲存類說明符(storage class specifier):typedef

C語言- 儲存類說明符(storage class specifier):typedef

1) 定義一個新的結構型別
1 2 3 4 5 6 7 8 9 10 struct tagMyStruct { int iNum; long lLength; };
分析:tagMyStruct稱為“tag”,即“標籤”,實際上是一個臨時名字,struct關鍵字和tagMyStruct一起,構成了這個結構型別,不論是否有typedef,這個結構都存在。 我們可以用struct tagMyStruct varName來定義變數,但要注意,使用tagMyStruct varName來定義變數是不對的,因為struct 和tagMyStruct合在一起才能表示一個結構型別。 2) typedef為這個新的結構起了一個名字,叫MyStruct。 typedef struct tagMyStruct MyStruct; 因此,MyStruct實際上相當於struct tagMyStruct,我們可以使用MyStruct varName來定義變數。 答案與分析 C語言當然允許在結構中包含指向它自己的
指標
,我們可以在建立連結串列等資料結構的實現上看到無數這樣的例子,上述程式碼的根本問題在於typedef的應用。 根據我們上面的闡述可以知道:新結構建立的過程中遇到了pNext域的宣告,型別是pNode,要知道pNode表示的是型別的新名字,那麼在型別本身還沒有建立完成的時候,這個型別的新名字也還不存在,也就是說這個時候編譯器根本不認識pNode。 解決這個問題的方法有多種: 1)、
1 2 3 4 5 6 7 8 9 10 typedefstruct tagNode {
char* pItem; struct tagNode* pNext; }*pNode;
2)、
1 2 3 4 5 6 7 8 9 10 typedefstruct tagNode* pNode; struct tagNode { char* pItem; pNode pNext;//這邊不用pNode* ,pNode 已經表示了struct tagNode*

相關推薦

C語言- 儲存說明符storage class specifiertypedef

1) 定義一個新的結構型別 1 2 3 4 5 6 7 8 9 10 struct tagMyStruct { int iNum; long lLength;

C語言儲存修飾和型別限定

儲存類修飾符 宣告中出現的儲存類修飾符(storage class specifier)用於修改識別符號的連結和對應物件的儲存週

C語言儲存

儲存類、 作用域、 生命週期、 連結屬性C 語言符號有 3 種連線屬性: 外部連線、 內部連線、 無連線。 記憶體有多種管理方法: 棧、 堆、 資料段、 bss 段、 .text 段······一個變

C語言儲存總結

要理解儲存類,首先要搞清楚如下三個問題:作用域、連結、儲存時期 作用域:描述程式中可以訪問一個識別符號的一個或多個區域。作用域分為:程式碼塊作用域、函式原型作用域、檔案作用域。    (一個檔案內,變數可以被訪問的位置) 對於程式碼塊作用域有一點需要注意,它包括在f

c語言中的特殊符號結構體中

結合 特殊 value -s height 間接尋址 出現 span size  在“結構”中出現的->運算符成為“右箭頭選擇”,可以用new_node->value = 10;來代替(*new_code).value = 10;即運算符->是運算符*和運

C語言】實現一個計算器兩種方式

1.使用switch…case…語句實現 #define _CRT_SECURE_NO_DEPRECATE 1 #include <stdio.h> #include <stdlib.h> int add(int x, int y) {   &nb

ubuntu下c語言對mysql進行CRUD增刪改查

Step 1:登入mysql mysql -u root -p Step 2:在資料庫中新增資料: create database foo; use foo; CREATE TABLE children( childno int(11) NOT NULL

python 學習彙總61class-描述初級學習- tcy

描述符 2018/8/9 -------------------------------------------------------------------------- 1.描述符就是一個代表屬性值的物件。 # 描述符只能在類級別上進行例項化。 # 不能通過在__init_

C語言實現簡單 三子棋井字棋小遊戲

函式頭 放在標頭檔案裡 #ifndef __GAME_H__ #define __GAME_H__ #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #inc

C語言寫的貪吃蛇國慶任務專案

分享寫貪吃蛇的緣起 博主大一新生,因為有任務C語言寫貪吃蛇,去網上找別人的原始碼試一試效果,可是沒有一個可以通過編譯執行,現在博主好不容易寫完了貪吃蛇,卻深感單初不易,現在分享一下原始碼,應該不會像網上大多數的C語言貪吃蛇程式碼無法編譯正確,通過執行。(我用的D

C語言判斷第幾天最簡版

C語言 判斷第幾天(最簡版) 輸入年、月、日,計算該日是該年的第幾天。 例如 輸入: 2012 7 1 輸出: 183 輸入: 2017 1 1 輸出: 1 #include <stdio.h> int main() { int year, month, day; i

C語言作業系統——磁碟排程演算法FCFS/SSTF/CSAN

首先設定disk_scheduling.h標頭檔案#include "stdio.h"#include "math.h"#include "windows.h"#define MAX 50void FCFS(int num[],int first,int count);//先

C語言面試題大彙總 影象處理方向

1、區域性變數能否和全域性變數重名?    答:能,區域性會遮蔽全域性。要用全域性變數,需要使用"::" ;區域性變數可以與全域性變數同名,在函式內引用這個變數時,會用到同名的區域性變數,而不會用到全域性變數。對於有些編譯器而言,在同一個函式內可以定義多個同名的區域性變數,比如在兩個迴圈體內都定義一個同名的

C語言對位進行操作增刪查改

利用移位運算、位與、位或,可以查詢、修改某一bit的值。程式如下 #define uchar unsigned char /*測試變數某一位是否為‘1’,是返回真,否返回假,num為待測試的數,bit為位數,其值從0到7,下同*/ uchar bittest(uchar

C語言日期和時間獲取小白筆記

包含在標頭檔案<time.h>的time函式用於獲取當前時間和日期。 其函式原型為time_t time(time_t *timer)。time_t為新定義資料型別,其定義在<time.h>中。使用不同編譯器該定義會略有不同,大致定義為: type

C語言資料結構----連結串列靜態連結串列

看了老唐的靜態連結串列,越發的覺得自己是菜鳥了,因為看的過程實在是太糾結了。下面就把自己看老唐靜態連結串列的內容寫下來。 一、靜態連結串列的基礎知識 1.單鏈表的缺陷:單鏈表的實現嚴重依賴指標,每一個數據元素都要有額外的指標域。 2.在靜態表中我們把資料元素放在一個數組裡,

Linux C語言的Socket程式設計例子TCP和UDP

     套接字是一種程序間的通訊的方法,不同於以往介紹的程序間通訊方法的是,它並不侷限於同一臺計算機的資源,例如檔案系統空間,共享記憶體或者訊息佇列。套接字可以認為是對管道概念的擴充套件——一臺機器上的程序可以使用套接字與另一臺機器上的程序通訊。因此客戶與伺服器可以分散在網

c語言實用經典100題1-10題

【程式1】題目:有1、2、3、4個數字,能組成多少個互不相同且無重複數字的三位數?都是多少?1.程式分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去      掉不滿足條件的排列。2.程式原始碼:#include<stdio.h> #in

C語言實現反轉陣列】用棧實現51nod

題幹: 輸入一個長度為n(1 <= n <= 100000)陣列,倒序輸出他。 陣列中的元素ai滿足(1 <= ai <= 100000)。 Input 第一行一個整數n

C語言-求數字階乘遞迴函式

/* * C語言 求數字的階乘 */ #include <stdio.h> #include <stdlib.h> long jiecheng(int n); void main() { int n=0; pri