2019-08-03 Day6 C語言指針和結構體

目的

初步掌握C語言指針和結構體的定義和使用

指針

指針的靈活運用使得c語言更加強大怜瞒,指針是C語言中十分重要的部分孔祸,可以說指針是C語言的靈魂。

為什么要使用指針

指針可以解決跨區(qū)域(不同作用域 不同代碼塊)之間的數(shù)據(jù)交互,同時使用指針
能夠創(chuàng)建動態(tài)數(shù)據(jù)結構六孵。這時內(nèi)存將在程序運行的時候從堆上分配椿浓,而不用一開始就聲明數(shù)組的最大規(guī)模太援。這樣您就可以為每個文檔準確地分配內(nèi)存而不會產(chǎn)生浪費。而且扳碍,關閉一個文檔時您還可以把它占用的內(nèi)存返回給堆提岔,以供程序的其他部分使用。使用指針笋敞,內(nèi)存就可以在程序運行期間不斷被回收利用碱蒙。

指針的使用

定義指針變量與定義普通變量非常類似,不過要在變量名前面加星號*,格式為:

datatype *name;

或者

datatype *name = value;```

*表示這是一個指針變量赛惩,datatype表示該指針變量所指向的數(shù)據(jù)的類型 哀墓。例如:

int *p1;

p1 是一個指向 int 類型數(shù)據(jù)的指針變量,至于 p1 究竟指向哪一份數(shù)據(jù)喷兼,應該由賦予它的值決定篮绰。再如:

int a = 100;
int *p_a = &a;

在定義指針變量 p_a 的同時對它進行初始化,并將變量 a 的地址賦予它季惯,此時 p_a 就指向了 a吠各。值得注意的是,p_a 需要的一個地址勉抓,a 前面必須要加取地址符&走孽,否則是不對的。
和普通變量一樣琳状,指針變量也可以被多次寫入磕瓷,只要你想,隨時都能夠改變指針變量的值念逞,請看下面的代碼:

//定義普通變量
float a = 99.5, b = 10.6;
char c = '@', d = '#';
//定義指針變量
float *p1 = &a;
char *p2 = &c;
//修改指針變量的值
p1 = &b;
p2 = &d;

注意指針指向的內(nèi)存空間只能在存放定義數(shù)據(jù)類型的數(shù)困食,同時定義指針變量的時候一定要給初值 不確定就給NULL;NULL指向內(nèi)存的初始地址0x00翎承。

數(shù)組和指針之間的關系

定義一個數(shù)組 系統(tǒng)會分配內(nèi)存空間 可以存值
定義一個指針變量 只為變量本身分配8個字節(jié)內(nèi)存空間無法存值硕盹,因為系統(tǒng)沒有為他分配內(nèi)存空間。
那如果想給指針指向的區(qū)域賦值叨咖,應該怎么辦呢瘩例?

1.指針變量已經(jīng)指向某塊區(qū)域
 int a3 = 10;
 int *pa = &a3;
 *pa = 30;
2.指針指向一個數(shù)組
 int num2[10]= {};
 int *pNum = num2;
3.動態(tài)分配內(nèi)存 malloc realloc

上面兩種指向的內(nèi)存都是別人的,現(xiàn)在分配一個屬于自己的內(nèi)存空間,而自己分配的內(nèi)存空間必須自己釋放甸各,普通變量的內(nèi)存是系統(tǒng)自己分配 垛贤,所以系統(tǒng)自己釋放當分配的空間不夠了,需要在之前的基礎上重新分配用realloc函數(shù)但必須是之前用malloc函數(shù)進行過動態(tài)分配的 系統(tǒng)自己分配的內(nèi)存則不能使用realloc來重新分配內(nèi)存趣倾,同時一旦用完了聘惦,便自己釋放內(nèi)存。

malloc():
 int *pNumber = (int*)malloc(100);               // 分配100字節(jié)內(nèi)存
    int *pNumber = (int*)malloc(25*sizeof(int));        //存儲25個int值得內(nèi)存

用 if 語句檢查是否分配:

 int *pNumber = (int*)malloc(25*sizeof(int));

    if (!pNumber)
    {
        // 內(nèi)存分配失敗的處理代碼
    }    

釋放動態(tài)分配的內(nèi)存:

 free(pNumber);

    pNumber = NULL;

結構體

為什么要使用結構體

由于一個數(shù)組中只能存放同一種類型的數(shù)據(jù)儒恋,很不方便善绎,所以C語言允許用戶自己建立由不同類型數(shù)據(jù)組成的組合型的數(shù)據(jù)結構,也就是結構體诫尽,把一些有共同特征(比如同屬于某一類事物的屬性)的變量封裝在內(nèi)部禀酱,通過一定方法訪問修改內(nèi)部變量。

結構體的使用

聲明一個結構體類型的一般形式是


stuct 結構體名
    {成員列表};

例如先聲明結構體類型牧嫉,再定義該類型變量:

{
    int num;
    char name[20];
    char sex;
    int age;
}
struct student S1,S2;

或者在聲明定義的同時定義變量:

struct student
{
    int num;
    char name[20];
    char sex;
    int age;
}S1,S2;

結構體變量的初始化和引用


#include <stdio.h>
int main()
{
    struct student
    {
        char name[20];

        int age;
     };
    struct student XW1={"zhangsan",18};
     printf("name:%s age:%d\n"XW1.name,XW1.age);
     return 0;
}

今日小結

今天所講的內(nèi)容可能是整個C語言中最難的一塊了剂跟,不管是動態(tài)分布內(nèi)存,還是調(diào)用文件,鏈表都聽的一知半解浩聋,有的時候走神幾分鐘观蜗,就有點無法跟上進度臊恋,好在今天是C語言的最后一天衣洁,有充分的時間,對今天的內(nèi)容進行整理和回顧抖仅。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坊夫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子撤卢,更是在濱河造成了極大的恐慌环凿,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件放吩,死亡現(xiàn)場離奇詭異智听,居然都是意外死亡,警方通過查閱死者的電腦和手機渡紫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門到推,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人惕澎,你說我怎么就攤上這事莉测。” “怎么了唧喉?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵捣卤,是天一觀的道長。 經(jīng)常有香客問我八孝,道長董朝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任干跛,我火速辦了婚禮益涧,結果婚禮上,老公的妹妹穿的比我還像新娘驯鳖。我一直安慰自己闲询,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布浅辙。 她就那樣靜靜地躺著扭弧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪记舆。 梳的紋絲不亂的頭發(fā)上鸽捻,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音,去河邊找鬼御蒲。 笑死衣赶,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的厚满。 我是一名探鬼主播府瞄,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼碘箍!你這毒婦竟也來了遵馆?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤丰榴,失蹤者是張志新(化名)和其女友劉穎货邓,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體四濒,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡换况,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了盗蟆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戈二。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖姆涩,靈堂內(nèi)的尸體忽然破棺而出挽拂,到底是詐尸還是另有隱情,我是刑警寧澤骨饿,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布亏栈,位于F島的核電站,受9級特大地震影響宏赘,放射性物質(zhì)發(fā)生泄漏绒北。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一察署、第九天 我趴在偏房一處隱蔽的房頂上張望闷游。 院中可真熱鬧,春花似錦贴汪、人聲如沸脐往。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽业簿。三九已至,卻和暖如春阳懂,著一層夾襖步出監(jiān)牢的瞬間梅尤,已是汗流浹背柜思。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留巷燥,地道東北人赡盘。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像缰揪,于是被迫代替她去往敵國和親陨享。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型邀跃。 運用指針編程是C語言最主要的風格之一霉咨。利用指針變量可以表示各種數(shù)據(jù)結構蛙紫; ...
    朱森閱讀 3,430評論 3 44
  • 版權聲明:本文為 gfson 原創(chuàng)文章,轉載請注明出處。注:作者水平有限良拼,文中如有不恰當之處疮方,請予以指正,萬分感謝...
    gfson閱讀 2,918評論 0 6
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,093評論 1 32
  • 第十章 指針 1. 地址指針的基本概念: 在計算機中唁毒,所有的數(shù)據(jù)都是存放在存儲器中的蒜茴。一般把存儲器中的一個字節(jié)稱為...
    堅持到底v2閱讀 1,065評論 2 3
  • (2017-12-26-周二 23:53:23) ①選擇文本,②Alt+T (雞肋功能)
    菜五閱讀 414評論 0 0