C語言-(指針域醇、動態(tài)分配內(nèi)存、結(jié)構(gòu)體蓉媳、創(chuàng)建文件)


心得體會

  • 今天是c語言學習的最后一天譬挚,我們終于學到了指針部分。整天課下來我是聽得云里霧里的酪呻,大腦并不能很快的反應(yīng)過來减宣,尤其是最后編寫demo的部分,對我來說很是困難号杠,可以說上課的時候我?guī)缀跬耆珱]有聽懂蚪腋。但是,有時候人真的是愈戰(zhàn)愈勇姨蟋,雖然真的很困難屉凯,但是我還是要盡全力去把他搞懂,說不定眼溶,接下來將會海闊天空呢^^.

技術(shù)

  • 指針

  • c語言動態(tài)分配內(nèi)存

  • 結(jié)構(gòu)體

  • 將結(jié)構(gòu)體寫入文件


操作以及操作詳解

  • 指針
    1.什么是指針

其實指針就像是其它變量一樣悠砚,所不同的是一般的變量包含的是實際的真實的數(shù)據(jù),而指針包含的是一個指向內(nèi)存中某個位置的地址堂飞。

2.為什么要使用指針

a.指針解決跨區(qū)域(不同作用域 不同代碼塊)之間的數(shù)據(jù)交互
b.為函數(shù)提供修改調(diào)用變元的靈活手段灌旧;
c.支持C 語言動態(tài)分配子程序
d.可以改善某些子程序的效率
e.為動態(tài)數(shù)據(jù)結(jié)構(gòu)(如二叉樹、鏈表)提供支持

3.指針中符號-------------'*'表示的含義

a.聲明定義變量的時候 表示一個指針變量
int*a//定義指針變量
int *temp=&c//定義指針變量
b.除了定義指針變量之外 都是訪問個地址的值
*temp=21绰筛;//訪問temp地址里面的數(shù)據(jù) 賦值為21

4.指針的使用注意事項

a.int *a;此時定義一個指針變量枢泰,指向的內(nèi)存空間只能存放整數(shù)
b.定義指針變量的時候一定要賦初值

c.
float b=20;
int c=10;
int *a=b; //錯誤;指針變量只能存地址铝噩,不能存具體值***a=&b)`
int *a=&b;//錯誤 整形指針只能存整形數(shù)據(jù)的地址
int *a=&c;//正確
float *d=NULL;//NULL指向內(nèi)存的首地址 0x00
d.
#include <iostream.h>
  int test(int a){
    return 0;
 }
 int main(int argc, char *argv[])
  { int a=10;
    int *pa=&a;

    int a2[10]={};
    int *pa2=a2;

    int(*pFunc)(int )=test;//這是一個函數(shù)衡蚂,函數(shù)的函數(shù)名實際上就是這個代碼在內(nèi)存中的首地址,所以test前面不加& 
    printf("%lu\n",sizeof(a)); //4
    printf("%lu\n",sizeof(*pa));//8
    printf("%lu\n",sizeof(a2));//40
    printf("%lu\n",sizeof(*pa2));//8
    printf("%lu\n",sizeof(pFunc));//8
  //sizeof判斷某一種類型在內(nèi)存里面占據(jù)的內(nèi)存空間是多少 
    system("pause"); 
    return 0;
}

5.指針與數(shù)組的關(guān)系

a.數(shù)組名并不是 一個變量 沒有分配內(nèi)存空間 int a=10;指針變量是有內(nèi)存空間的
b.定義一個數(shù)組,系統(tǒng)會分配內(nèi)存空間;定義一個指針變量 只為變量本身分配8個字節(jié)內(nèi)存空間

  #include <iostream.h>
   int main(int argc, char *argv[])
  {int score[5]={39,32,34,67,89};
    printf("%p\n",score);
    printf("%p\n",&score);
    system("pause");
    return 0;
}
QQ截圖20190803225355.png

從上述結(jié)果可以看出兩種輸出結(jié)果是一樣的毛甲,故由此可得:數(shù)組名其實就是數(shù)組的首地址


int score[5]={39,32,34,67,89};
    for(int i=0;i<5;i++){
        printf("%d ",score[i]);
    }
    
    for(int i=0;i<5;i++){
        printf("%d ",*(score+1));
    }
QQ截圖20190803231800.png

int score[5]={39,32,34,67,89};
    printf("%p\n",score);
    printf("%p\n",score+1);
    printf("%d\n",*(score+1));
    printf("%d\n",*score+1);
QQ截圖20190803232146.png

int score[5]={39,32,34,67,89};
    printf("%d\n",(*score)++);
    printf("%d\n",score[0]);
    printf("%d\n",++*score);
QQ截圖20190803232445.png

注意D甓!!玻募!
這里有一個坑只损,第一次打印是39,第一次打印過后就加1變成了40七咧,所以第二次打印是40跃惫;


  • c語言動態(tài)分配內(nèi)存

a.自己分配的內(nèi)存必須自己釋放,普通變量的內(nèi)存是系統(tǒng)自己分配, 所以系統(tǒng)自己負責釋放
b.步驟:創(chuàng)建了一個內(nèi)存空間--->判斷分配是否成功--->當之前分配的內(nèi)存空間多了或少了 ,就需要在之前前的基礎(chǔ)上重新分配--->內(nèi)存空間用完后需立刻釋放內(nèi)存空間

char *pName=malloc(10*sizeof(char));//創(chuàng)建了一個內(nèi)存空間
if(pName==NULL){//判斷分配是否成功
    //r如果分配失敗
    return;(exit(EXIT_FAILURE))
}
pName[0]='j';
pName[1]='a';
pName[2]='c';
printf("%s",pName);
//當之前分配的內(nèi)存空間多了或少了 就需要在職期前的基礎(chǔ)上重新分配
//realloc 必須是之前使用malloc分配過的
pName=realloc(pName,4*sizeof(char));//重新分配內(nèi)存空間
pName[3]='k';
free(pName);//用完了就要自己釋放內(nèi)存

  • 結(jié)構(gòu)體
    什么是結(jié)構(gòu)體

結(jié)構(gòu)體是一種數(shù)據(jù)類型 復(fù)合數(shù)據(jù)類型

//聲明一種類型 struct Person
struct Person{
    char name[10];
    char *addr;
    int age;
}坑雅;
//定義結(jié)構(gòu)體變量 變量名為xw

struct Person xw;
xw.name="小王"辈挂;//錯誤!9痢终蒂!
xw.name[0]='x';//正確

數(shù)組一旦定義 地址不能改變;
不能直接給數(shù)組賦值;

  • 將結(jié)構(gòu)體寫入文件
    a.運行思路

把什么東西寫到文件里---這個東西有多大---寫到哪里去---寫幾個


1.把結(jié)構(gòu)體寫到文件
步驟:打開電腦的cmd---將你想要寫的文件的地址的任意一個文件拖到cmd中----將文件名改為你所要創(chuàng)建的文件名----得到文件的完全路徑---把完全路徑寫入fopen()中

#include <stdio.h>

int main(int argc, char *argv[])
{ 
    FILE *fp=fopen("C:/Users/Administrator.000/Desktop/abcd.txt","w");
    struct Student{
        char name[10];
        int age;
    };
struct Student xw1={"xiaowang",20};
fwrite(&xw1,sizeof(struct Student),1,fp);
system("pause");
return 0;
}
K)3IUNYPHB[]~NEMMPXPW~Q.png

RZBDXGF{U0AJD3~JHN()DXC.png

2.接下來以只讀方式打開文件

int main(int argc, char *argv[])
{ 
    FILE *fp=fopen("C:/Users/Administrator.000/Desktop/abcd.txt","r");
    struct Student{
        char name[10];
        int age;
    };
    struct Student xw1;
    fread(&xw1,sizeof(struct Student),1,fp);
    printf("name:%s\n",xw1.name);
    printf("age:%d\n",xw1.age);
    fclose(fp);

    system("pause");
    return 0;
}
QQ截圖20190804001929.png

在調(diào)用 fopen() 函數(shù)時遥诉,這些信息都必須提供拇泣,稱為“文件打開方式”。最基本的文件打開方式有以下幾種:


QQ截圖20190804144435.png

文件一旦使用完畢矮锈,應(yīng)該用 fclose() 函數(shù)把文件關(guān)閉霉翔,以釋放相關(guān)資源,避免數(shù)據(jù)丟失苞笨。fclose() 的用法為:
int fclose(FILE *fp);
fp 為文件指針债朵。例如:
fclose(fp);
文件正常關(guān)閉時,fclose() 的返回值為0瀑凝,如果返回非零值則表示有錯誤發(fā)生序芦。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市粤咪,隨后出現(xiàn)的幾起案子谚中,更是在濱河造成了極大的恐慌,老刑警劉巖寥枝,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宪塔,死亡現(xiàn)場離奇詭異,居然都是意外死亡囊拜,警方通過查閱死者的電腦和手機某筐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冠跷,“玉大人来吩,你說我怎么就攤上這事敢辩。” “怎么了弟疆?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長盗冷。 經(jīng)常有香客問我怠苔,道長,這世上最難降的妖魔是什么仪糖? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任柑司,我火速辦了婚禮,結(jié)果婚禮上锅劝,老公的妹妹穿的比我還像新娘攒驰。我一直安慰自己,他們只是感情好故爵,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布玻粪。 她就那樣靜靜地躺著,像睡著了一般诬垂。 火紅的嫁衣襯著肌膚如雪劲室。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天结窘,我揣著相機與錄音很洋,去河邊找鬼。 笑死隧枫,一個胖子當著我的面吹牛喉磁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播官脓,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼协怒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了确买?” 一聲冷哼從身側(cè)響起斤讥,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎湾趾,沒想到半個月后芭商,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡搀缠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年铛楣,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艺普。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡簸州,死狀恐怖鉴竭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情岸浑,我是刑警寧澤搏存,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站矢洲,受9級特大地震影響璧眠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜读虏,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一责静、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盖桥,春花似錦灾螃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至靴拱,卻和暖如春垃喊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背袜炕。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工本谜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人偎窘。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓乌助,卻偏偏與公主長得像,于是被迫代替她去往敵國和親陌知。 傳聞我的和親對象是個殘疾皇子他托,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

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