c語(yǔ)言-----指針

c語(yǔ)言-----指針

1.聲明/定義變量的時(shí)候 表示一個(gè)指針變量

    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

2.除了定義指針變量之外 都是訪問(wèn)某個(gè)地址的值

     int *temp = &c;//定義指針變量l
    *temp = 21; 訪問(wèn)temp地址里面的數(shù)據(jù) 賦值為21
    //‘&’ 取某個(gè)變量的地址

3.要學(xué)好指針就要抓住兩點(diǎn) (1)地址 (2)內(nèi)存空間
為什么要用指針:解決跨區(qū)域(不同作用域 不同代碼塊)之間的數(shù)據(jù)交互
指針最忌諱的:野指針:也就是指向不可用內(nèi)存區(qū)域的指針。通常對(duì)這種指針進(jìn)行操作的話,將會(huì)使程序發(fā)生不可預(yù)知的錯(cuò)誤咪惠。
注:指針變量在內(nèi)存里面占據(jù)8個(gè)字節(jié)空間

int main(int argc, const char * argv[]) {
int a = 10废封;

int *pa = &a;
int a2[10] = {};

int *pa2 = a2;
int(*pFunc)(int) = test;

char c = 'a';
char *pc = &c;
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
printf("%lu\n", sizeof(pc));//8

4.數(shù)組與指針在內(nèi)存上的差別:
數(shù)組名并不是一個(gè)變量 沒(méi)有分配內(nèi)存空間 int a = 10;
指針變量是有內(nèi)存空間
定義一個(gè)數(shù)組 系統(tǒng)會(huì)分配內(nèi)存空間 可以存值
int num[10] = {};
定義一個(gè)指針變量 只為變量本身分配8個(gè)字節(jié)內(nèi)存空間
(無(wú)法存值穆役,因?yàn)闆](méi)有為他分配可以存值的內(nèi)存空間)
int *p;
給指針指向的區(qū)域賦值:
1.指針變量已經(jīng)指向某塊區(qū)域
int a3 = 10;
int *pA = &a3; //指向變量a的內(nèi)存地址
*pA = 30;

2.指針指向一個(gè)數(shù)組
int num2[10] = {};
int *pNum = num2; //指向數(shù)組num2的首地址
*(pNum+0) = 20; 等價(jià)于 pNum[0] = 20;
*(pNum + 1) = 30; 等價(jià)于 pNum[1] = 30;

C語(yǔ)言————?jiǎng)討B(tài)存儲(chǔ)

3.動(dòng)態(tài)分配內(nèi)存
 三個(gè)點(diǎn):  malloc    realloc    free
上面兩種指向的內(nèi)存都是別人的,是系統(tǒng)分配的,一般當(dāng)出了作用域 內(nèi)存就會(huì)被釋放。

而此方法希望分配一個(gè)屬于自己的內(nèi)存空間
自己分配的內(nèi)存空間必須自己釋放
注:普通變量的內(nèi)存是系統(tǒng)自己分配 所以系統(tǒng)自己負(fù)責(zé)釋放

char *pName = malloc(3 * sizeof(char));
//判斷分配是否成功
if(pName == NULL){
//分配失敗
exit(EXIT_FAILURE);
}
//若分配成功奄喂,使:
pName[0] = 'j';
pName[1] = 'a';
pName[2] = 'c';

//當(dāng)之前分配的內(nèi)存空間不夠了 就需要在之前的基礎(chǔ)上重新分配
//realloc 必須是之前使用malloc分配過(guò)的
//malloc分配的內(nèi)存不夠用時(shí),用realloc增加分配內(nèi)存 并將malloc 上的內(nèi)容復(fù)制過(guò)去 并將之前malloc分配的內(nèi)存清除
//如果是系統(tǒng)分配的內(nèi)存 是不能使用realloc的
//用完了就要自己釋放內(nèi)存
pName =  realloc(pName, 4*sizeof(char));
pName[3] = 'k';

printf("%s\n", pName);
free(pName);

return 0;

}

C語(yǔ)言————結(jié)構(gòu)體

結(jié)構(gòu)體 是一種復(fù)合數(shù)據(jù)類型
//struct
//聲明一種類型 struct Person == int
struct Person {
char name[10];
char *addr;
int age;
};

// int i1 = 10;
// struct Person zs = {"張三", 20};
//定義結(jié)構(gòu)體struct Person變量 變量名xw

int i;
i = 20;
struct Person xw;
//xw.name = "小王";此用法錯(cuò)誤:M荨跨新!  *數(shù)組一旦定義 地址不能改變
                //不能直接給數(shù)組賦值
xw.name[0] = 'x';//系統(tǒng)為這個(gè)變量分配內(nèi)存了
xw.name[1] = 'w';

//xw.addr = "西南大學(xué)";此用法正確   *常量字符串的地址是由系統(tǒng)分配的
//先為addr分配內(nèi)存
xw.addr = malloc(4 * sizeof(char));
xw.addr[0] = 'S';//字符指針賦值 必須要有內(nèi)存
xw.addr[1] = 'o';
xw.addr[2] = 'u';
xw.addr[3] = 't';
xw.age = 30;
printf("name:%s\n", xw.name);
printf("addr:%s\n", xw.addr);

C語(yǔ)言————文件操作

寫(xiě)入數(shù)據(jù):

int main(int argc, const char * argv[]) {
//打開(kāi)文件
//fopen("abc.txt",const char *restrict __mode) ;
FILE *fp=fopen("C:/Users/12931/Desktop/abc1.txt","w");
//寫(xiě)入結(jié)構(gòu)體
struct Student{
char name[10];
int age;
};
struct Student xw1={"小紅",20};
fwrite(&xw1,sizeof(struct Student),1,fp);
fclose(fp);
return 0;
}

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

int main(int argc, const char * argv[]) {
//打開(kāi)文件
//fopen("abc.txt",const char *restrict __mode) ;
FILE *fp=fopen("C:/Users/12931/Desktop/abc1.txt","r");
//寫(xiě)入結(jié)構(gòu)體
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);
return 0;
}
心得:
此次指針學(xué)習(xí)讓我感受到了C語(yǔ)言的精髓所在,動(dòng)態(tài)分配內(nèi)存更是讓我大開(kāi)眼界 感覺(jué)牛逼的亞子坏逢,當(dāng)然域帐,指針的確比較難,有好多地方像是在讀無(wú)字天書(shū)是整,就是懂不了肖揣,鏈表更是聽(tīng)的云里霧里,似懂非懂的浮入。感覺(jué)自己不懂的還有好多许饿,不過(guò)今天也學(xué)習(xí)了好多指針、結(jié)構(gòu)體舵盈、動(dòng)態(tài)分配內(nèi)存的基礎(chǔ)知識(shí),也算很有收獲球化!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末秽晚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子筒愚,更是在濱河造成了極大的恐慌赴蝇,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巢掺,死亡現(xiàn)場(chǎng)離奇詭異句伶,居然都是意外死亡劲蜻,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)考余,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)先嬉,“玉大人,你說(shuō)我怎么就攤上這事楚堤∫呗” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵身冬,是天一觀的道長(zhǎng)衅胀。 經(jīng)常有香客問(wèn)我,道長(zhǎng)酥筝,這世上最難降的妖魔是什么滚躯? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮嘿歌,結(jié)果婚禮上掸掏,老公的妹妹穿的比我還像新娘。我一直安慰自己搅幅,他們只是感情好阅束,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著茄唐,像睡著了一般息裸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沪编,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天呼盆,我揣著相機(jī)與錄音,去河邊找鬼蚁廓。 笑死访圃,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的相嵌。 我是一名探鬼主播腿时,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼饭宾!你這毒婦竟也來(lái)了批糟?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤看铆,失蹤者是張志新(化名)和其女友劉穎徽鼎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡否淤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年悄但,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片石抡。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡檐嚣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出汁雷,到底是詐尸還是另有隱情净嘀,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布侠讯,位于F島的核電站挖藏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏厢漩。R本人自食惡果不足惜膜眠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望溜嗜。 院中可真熱鬧宵膨,春花似錦、人聲如沸炸宵。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)土全。三九已至捎琐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間裹匙,已是汗流浹背瑞凑。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留概页,地道東北人籽御。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像惰匙,于是被迫代替她去往敵國(guó)和親技掏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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