學(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,4sizeof(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)不下去了。