C語(yǔ)言中指針和結(jié)構(gòu)體和向該文件操作

學(xué)習(xí)目的:

在C語(yǔ)言中熟練掌握指針的定義、用法和與數(shù)組的區(qū)別,以及結(jié)構(gòu)體的定義和使用

相關(guān)技術(shù),及其使用

指針:
為什么要用指針
解決跨區(qū)域(不同作用域 不同代碼塊)之間的數(shù)據(jù)交互
怎么用
*是聲明或定義變量的時(shí)候表示一個(gè)指針變量,指針變量指向內(nèi)存空間,定義指針變量時(shí)一定要給初值,不確定就用NULL(NULL指向內(nèi)存起始地址0x00)指針變量只能存地址不能存具體值,例如:

int c =10;float b = 10;  int *a = b;

這樣會(huì)出錯(cuò),而int *a= &c就正確

  • 除了定義指針變量外都是訪問(wèn)某個(gè)地址的值,例如:
Int *temp=&c;//定義指針變量
 *temp= 21;// 訪問(wèn)temp地址里面的數(shù)據(jù)賦值為21

而&是表示某個(gè)變量的地址(不管定義的指針式什么類型 指針變量在64位操作系統(tǒng)里面都是占8個(gè)字節(jié))
數(shù)組和指針的關(guān)系
數(shù)組名并不是一個(gè)變量 沒(méi)有有分配內(nèi)存空間,而指針是有內(nèi)存空間的例如:

 Int score[5] = {39,,20,55,32,33};
priintf(“%p\n”,score);
printf(“%p\n”,&score);
for(int i =0 ;i<5;i++){
printf(“%d ”,score[i]);
}
for(int i=0;i<5;i++){
printf(“%d ”,*(score+1));
}

score 表示值,score+1= 0x100+14(類型字節(jié)個(gè)數(shù))
score++是在運(yùn)行完后++
數(shù)組和指針的區(qū)別:
定義一個(gè)數(shù)組系統(tǒng)會(huì)分配內(nèi)存空間
定義一個(gè)指針變量只為變量本身分配8個(gè)字節(jié)內(nèi)存空間 無(wú)法存值 因?yàn)闆](méi)有為他分配可以存值的內(nèi)存空間
如何給指針賦值:
1、指針變量已經(jīng)指向某塊區(qū)域 存一個(gè)值

int a = 10; int *pa =&a;//指向變量a 的地址  *pa = 30;

2、指針指向一個(gè)數(shù)組存多個(gè)值

int num[20] ={};  
int *pnum = num;//指向數(shù)組num的首地址;
  *pnum(+0) =20;->pnum[0]=20;

3、動(dòng)態(tài)分配內(nèi)存 malloc realloc方法(自己分配內(nèi)存空間自己釋放,普通變量的內(nèi)存是系統(tǒng)自己分配,系統(tǒng)自己釋放)
malloc方法 導(dǎo)入頭文件#include<stdlib.h>:
類型 指針 = Malloc(個(gè)數(shù)sizeof(類型))->自己申請(qǐng)的內(nèi)存空間
判斷分配是否成功if(pname == NULL){
//分配失敗exit(EXIT_FALURE);
realloc方法:
realloc必須是之前使用malloc分配過(guò)的 如果是系統(tǒng)分配的內(nèi)存 是不能用 realloc例如:
pname = realloc(pname,4
sizeof(char));
用完過(guò)后就要自己釋放內(nèi)存free(pname);
結(jié)構(gòu)體:一種類型數(shù)據(jù) 符合數(shù)據(jù)類型
定義方法:
定義struct name{
組成 聲明一種類型
};

struct Person{
Char name[10];
Int age;
};

定義結(jié)構(gòu)體變量

Struct Person xw;
xw.name[0]= ‘x’;
xw.name[1]=’w’;//賦初值
Struct Person zs={“張三”,20};

結(jié)構(gòu)體里有指針(是否有內(nèi)存)
結(jié)構(gòu)體里面字節(jié)個(gè)數(shù) 如果兩個(gè)變量能夠共用一段字節(jié)空間和另外長(zhǎng)的那個(gè)能夠?qū)R
文件操作:
1、打開(kāi)文件 打開(kāi)終端(win+r)-cmd-終端-拖動(dòng)一個(gè)文件到終端(當(dāng)前文件的路徑.txt)
mode文件的操作模式:
r只讀 文件不存在就報(bào)錯(cuò) 從頭開(kāi)始讀
a 只寫 從末尾開(kāi)始寫
w 只寫 文件不存在就創(chuàng)建 從頭開(kāi)始寫
r+ w+ a+可讀可寫
fopen(“完整路徑”)
如果fopen不安全就用FILE *fp;
fopen_s(&fp,"","w");
2、寫入數(shù)據(jù)
fputs(“內(nèi)容”,fp)
3、讀取數(shù)據(jù)
Char temp[20] = {};
fgets(temp,3,fp)
4、關(guān)閉文件
fclose
例如:

struct Student {
        int num;
        char name[10];
        int age;
    };
    //結(jié)構(gòu)體寫在文件里面去

    FILE* fp;
    fopen_s(&fp, "C:/Users/asus/Desktop/Cproject.txt", "w");
    fputs("abc", fp);
    
    struct Student xw1 = {"xiaowang",20 };
    
    struct Student xw1;
    fread(&xw1, sizeof(struct Student), 1, fp);
    printf("name:%s\n",xw1.name);
    printf("age:%d\n",xw1.age);
    fwrite(&xw1, sizeof(struct Student), 1, fp);
    fclose(fp);
    

心得體會(huì)

初步了解了指針和結(jié)構(gòu)體的定義和使用方法,但是在給它們賦值的時(shí)候還有有點(diǎn)模糊,特別是在個(gè)結(jié)構(gòu)體賦值時(shí)。而文件操作就是要記死的東西到還好說(shuō),感覺(jué)很簡(jiǎn)單。然后,在老青年的帶領(lǐng)下嘗試了寫那個(gè)學(xué)生信息統(tǒng)計(jì)查看,不用說(shuō),好難,看的我一臉懵,都有點(diǎn)聽(tīng)不下去了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容