c語(yǔ)言的學(xué)習(xí)與實(shí)踐5(指針妈倔,動(dòng)態(tài)分配內(nèi)存博投,結(jié)構(gòu)體以及文件的讀取寫入)

1.收獲

今天學(xué)習(xí)了指針的定義,使用盯蝴,以及它的注意事項(xiàng)毅哗,盡管指針有許多的坑,也許我會(huì)跌入這個(gè)坑中捧挺,但是我還是要從跌倒的坑中爬起來虑绵,不斷理解,收獲頗多闽烙。雖然以前學(xué)過指針翅睛,但是只懂一點(diǎn)點(diǎn),但是通過今天的學(xué)習(xí)黑竞,明白了許多捕发。在以前只是聽說動(dòng)態(tài)分配內(nèi)存,不知道怎么做很魂,雖然自己在網(wǎng)上看了一些資料扎酷,但是沒有理解,但是今天學(xué)習(xí)動(dòng)態(tài)分配內(nèi)存之后遏匆,感覺它沒有多難法挨,感覺有g(shù)et到了新的知識(shí)。在以前學(xué)習(xí)c語(yǔ)言的文件的讀取和寫入這部分時(shí)幅聘,感覺自己是在聽天書坷剧,但是今天我明白怎樣去讀取和寫入,以及怎樣將結(jié)構(gòu)體寫入文件中喊暖,這也是以前我不會(huì)的闯割,但是現(xiàn)在我會(huì)了兽愤,這使我的信心大大增加县匠,我明白在編程的道路上是孤獨(dú)的肥缔,大部分時(shí)間時(shí)坐在電腦的面前,不斷思考巩掺,不斷將代碼寫入偏序,無(wú)論在這條路上是多麼困難,都不能放棄胖替,加油Q腥濉豫缨!!

2.技術(shù)

(1).指針的定義,使用以及注意事項(xiàng)
(2).動(dòng)態(tài)分配內(nèi)存
(3).結(jié)構(gòu)體
(4).文件的讀取和寫入

3.技術(shù)的實(shí)際應(yīng)用與解析

(1)指針
c c++ 有指針 多繼承
java 多繼承

C語(yǔ)言 :
為什么要有指針: 解決跨區(qū)域(不同作用域或不同的代碼塊)之間的數(shù)據(jù)交互
指針能夠干什么:地址 內(nèi)存空間
范例:

 int *a;

*a 取a的值
a 表示地址

*表示:
一.聲明/定義變量的時(shí)候 表示一個(gè)指針變量 int a;

范例:

               float b=20;
              int c=10;
           ***  int *a;定義一個(gè)指針變量    指向的內(nèi)存空間只能存放整數(shù)
           ***  注意:定義指針變量的時(shí)候一定要給初值   不確定就給NULL

范例:

                *** int *a=b;//不行  指針只能存地址 不能存具體值
               ***  int *a=&b; //不行  整型指針只能存整型數(shù)據(jù)的地址
               ***  int *a=&c;//正確
               ***  float *d=NULL//;NULL指向內(nèi)存的起始地址 0x00

二. 除了定義指針變量之外 都是訪問某個(gè)地址的
范例:

              ***  int *temp=&c;//定義指針變量
              ***  *temp=21;//訪問temp地址里面的內(nèi)容  在這里是給c賦值為21

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

注意:
//數(shù)組名并不是一個(gè)變量 沒有分配內(nèi)存空間
指針變量是有內(nèi)存空間的

范例:


int score[5]={16,65,9,8,4};
printf_s("%p\n",score);
printf_s("%p\n",&score);

在這里兩者輸出的結(jié)果是相同的端朵,如果數(shù)組名分配內(nèi)存空間
好芭,那么輸出的結(jié)果是不相同的,當(dāng)時(shí)這里輸出的結(jié)果是相同的說明數(shù)組名并不是一個(gè)變量 沒有分配內(nèi)存空間冲呢。

在學(xué)習(xí)完指針后要對(duì)指針進(jìn)行進(jìn)一步的理解
范例:

for(int i=0;i<5;i++){
    printf_s("%d",*(score+1));
      }
printf_s("%p",score);
printf_s("%p",score+1);
printf_s("%d",*(score+1));
printf_s("%d",*score+1);

在這里%p是對(duì)指針變量本身進(jìn)行輸出
score表示數(shù)組的首地址

而score+1表示score+1=score+類型的字節(jié)數(shù)乘1
*score表示score的指的地址中內(nèi)容

//
printf_s("%d",(*score)++);
printf_s("%d",score[0]);
printf_s("%d",++*score);

這里用了++的知識(shí)點(diǎn)舍败,前面的文章已經(jīng)講了,在這里說明一下(score)++敬拓,他打印出來時(shí)score的內(nèi)容邻薯,但是后面就執(zhí)行了++,所以score[0]就比原來多一乘凸,因?yàn)?/em>score=score[0]

//定義一個(gè)數(shù)組 系統(tǒng)會(huì)分配內(nèi)存空間 可以存值

   int num[10]={};

定義一個(gè)指針變量 只為變量本身分配8個(gè)字節(jié)的空間 無(wú)法存值厕诡,因?yàn)闆]有為他分配內(nèi)存空間
范例:

   int *p;
  num[2]=20;可以
  *p=20;不行

因?yàn)檫@里的指針沒有指向任何區(qū)域

//如果想給指針指向的的區(qū)域賦值
// (1).指針變量已經(jīng)指向某塊區(qū)域

int a=10;
int *p=&a;
*p=30;

** //(2).指針指向一個(gè)數(shù)組**

int num[10]={};
int *p=num;

*(p+0)=20;
p[0]=20;

*(p+1)=30;
p[1]=30;

(3).動(dòng)態(tài)分配內(nèi)存
動(dòng)態(tài)分配內(nèi)存
三個(gè)用到的 malloc realloc
//上面兩種指向的內(nèi)存是別人的
//希望分配屬于自己的內(nèi)存空間
free
//自己分配的內(nèi)存空間必須自己釋放
//普通變量的內(nèi)存是系統(tǒng)自己分配的 所以系統(tǒng)自己負(fù)責(zé)釋放

//需要導(dǎo)入文件

#include "stdlib.h"

//開始自己分配內(nèi)存

char *p=malloc(3*sizeof(char));
//判斷是否成功
if(p==NULL)p{
//分配失敗
   //退出
    exit(EXIT_FAILURE);
      }
P[0]='j';
p[1]='l';
p[2]='m';
printf_s("%s\n",p);

在這里打印出來結(jié)果是ijm

//當(dāng)自己申請(qǐng)的內(nèi)存空間不夠了或多了 就需要在之前的基礎(chǔ)上重新分配
//realloc 必須是之前使用malloc分配過的
//如果是系統(tǒng)分配的內(nèi)存 是不能用realloc的

p=realloc(p,4*sizeof(char));
p[3]='h';
//也要判斷是否分配成功
if(p==NULL)p{
//分配失敗
   //退出
    exit(EXIT_FAILURE);
      }
//用完了就要自己釋放內(nèi)存
     free(p);

其實(shí)動(dòng)態(tài)分配內(nèi)存不是那磨難

(4)結(jié)構(gòu)體以及結(jié)構(gòu)體的讀入文件
定義
結(jié)構(gòu)體// 是一種數(shù)據(jù)類型 復(fù)合數(shù)據(jù)類型

//struct
//聲明一種類型 struct Person


struct Person{
   char *addr;
   char name[10];
   int age;
    };
  //定義結(jié)構(gòu)體變量
  int i;
  i=20;
  struct Person xw;
  xw.name="小王";錯(cuò)的//數(shù)組一旦定義  地址不能改變
                 //不能直接給數(shù)組賦值
  xw.name[0]='x';//系統(tǒng)為這個(gè)變量分配內(nèi)存了
  xw.name[1]='w';

//xw.addr="西南大學(xué)"http://可以的 常量字符串的地址是由系統(tǒng)分配的
xw.addr[0]='s';//字符指針賦值 必須要有內(nèi)存 這樣是不對(duì)的

如何將結(jié)構(gòu)體讀入和讀取
//首先聲明

#include "stdlib.h"

//打開文件

FILE *p;
    fopen_s(&p,"C:/Users/ASUS/Desktop/ABC.txt","w"); 
if(p!=NULL){
      printf_s("該文件打開成功\n"); 
    /}
   else printf_s("該文件打開失敗\n"); 

//定義一個(gè)結(jié)構(gòu)體

    struct Student{
       char name[20];
       int age;
       float score;
      };
struct Student student1={"xiaowang",20,89.23};

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

fwrite(&student1,sizeof(struct Student),1,p);

//讀取文件
在這里需要注意在讀取時(shí)是不需要再寫入文件的嗎,因?yàn)榍懊嬉呀?jīng)寫入文件了
定義一個(gè)新的結(jié)構(gòu)體變量

FILE *p;
    fopen_s(&p,"C:/Users/ASUS/Desktop/ABC.txt","r"); 
struct Student student1={};

//讀取數(shù)據(jù)

    fread(&student1,sizeof(struct Student),1,p);
    printf_s("name:%s\n",student1.name);
    printf_s("age:%d\n",student1.age);
    printf_s("score:%0.2f\n",student1.score);

//關(guān)閉文件

    fclose(p);
    printf_s("文件已保存\n");

(5)文件的讀取和寫入
//打開文件

    FILE *p;
    fopen_s(&p,"C:/Users/ASUS/Desktop/ABC.txt","w"); 
if(p!=NULL){
      printf_s("該文件打開成功\n"); 
     }
    else printf_s("該文件打開失敗\n"); 

//寫入文件(在終端中輸入xiaowang#)

    fputs("c",p);
    printf_s("請(qǐng)輸入需要寫入的字符(以#結(jié)束):");
      char ch=getchar();
    while(ch!='#'){
      fputc(ch,p);
      ch=getchar();
     }
    printf_s("\n");

然后文件中就有

QQ圖片20190804205817.png

//讀取數(shù)據(jù)

char name[10]={};
fgets(name,8,p);//這里的數(shù)字是表示讀取多少個(gè)字符
printf_s("%s\n",name);

最終將“xiaowang”讀出
//關(guān)閉文件

    fclose(p);
    printf_s("文件已保存\n");
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末营勤,一起剝皮案震驚了整個(gè)濱河市灵嫌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌冀偶,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渔嚷,死亡現(xiàn)場(chǎng)離奇詭異进鸠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)形病,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門客年,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人漠吻,你說我怎么就攤上這事量瓜。” “怎么了途乃?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵绍傲,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我耍共,道長(zhǎng)烫饼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任试读,我火速辦了婚禮杠纵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘钩骇。我一直安慰自己比藻,他們只是感情好铝量,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著银亲,像睡著了一般慢叨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上群凶,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天插爹,我揣著相機(jī)與錄音,去河邊找鬼请梢。 笑死赠尾,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的毅弧。 我是一名探鬼主播气嫁,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼够坐!你這毒婦竟也來了寸宵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤元咙,失蹤者是張志新(化名)和其女友劉穎梯影,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體庶香,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡甲棍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赶掖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片感猛。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖奢赂,靈堂內(nèi)的尸體忽然破棺而出陪白,到底是詐尸還是另有隱情,我是刑警寧澤膳灶,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布咱士,位于F島的核電站,受9級(jí)特大地震影響轧钓,放射性物質(zhì)發(fā)生泄漏司致。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一聋迎、第九天 我趴在偏房一處隱蔽的房頂上張望脂矫。 院中可真熱鬧,春花似錦霉晕、人聲如沸庭再。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拄轻。三九已至颅围,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恨搓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弄抬,地道東北人掂恕。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像店枣,于是被迫代替她去往敵國(guó)和親艰争。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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