日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

C語言快速入門系列(7)

 Cola_mini 2016-08-28
C語言快速入門系列(七)

C語言快速入門系列(七)


C語言指針進(jìn)階


本章引言:


在前面第5節(jié)中我們對C語言的指針進(jìn)行了初步的學(xué)習(xí)理解;作為C語言的靈魂,

C指針肯定沒那么簡單,在這一節(jié)中,我們將會(huì)對指針進(jìn)行進(jìn)一步的學(xué)習(xí),比如二級指針,

指針數(shù)組,內(nèi)存分配和const修飾指針常量等!下面就請大家跟隨筆者的腳步,對

C指針神秘的一面進(jìn)行進(jìn)一步的解析吧!



本節(jié)學(xué)習(xí)路線圖:




函數(shù)與指針:

①指針作為函數(shù)的形參:




②指向函數(shù)的指針:




③指針函數(shù):





④帶參數(shù)的主函數(shù)




ps:該代碼的運(yùn)行:先要編譯生成exe文件后,來到exe所在文件目錄下:輸入:  文件名  one two three   

會(huì)輸出:one two three  




指針數(shù)組:


兩個(gè)問題:如何保存一個(gè)字符串?如果保存的不止一個(gè),而是多個(gè)呢?

第一個(gè)問題:

①char name[20] = "~~~"   ②char *name = "~~~"       //前者定義了長度,不能直接賦值,明顯后者比較靈活

第二個(gè)問題:見圖





二級指針:






內(nèi)存的動(dòng)態(tài)分配:




代碼示例:

動(dòng)態(tài)分配10個(gè)整型的空間大小,如果大于這個(gè)數(shù)目則動(dòng)態(tài)分配,否則利用realloc重新分配內(nèi)存

ps:代碼沒問題,vc6一直報(bào)運(yùn)行時(shí)錯(cuò)誤,如果出錯(cuò)了,用C-Free或者Visual studio等編譯器試試!


<span style="font-family:Microsoft YaHei;">#include <stdio.h>
#include <stdlib.h>
#define N 10

int main()
{
	int *p = 0;
	int  i,num,*q = 0;
	p = (int *)malloc((N * sizeof(int)));
	if(p == 0)
	{
		printf("內(nèi)存分配錯(cuò)誤!\n");
		exit(0);
	}
	printf("請輸入要存儲(chǔ)的元素個(gè)數(shù):\n");
	scanf("%d",&num);
	if(num <= N)
	{
		for(i = 0;i < N;i++)
		scanf("%d",p+i);
	}
	else
	{
		for(i = 0;i < num;i++)
		q = (int *)realloc(p,(N + N)*sizeof(int));
		if(q == 0)exit(0);
		for(i = 0;i < num;i++)
		scanf("%d",q + i);
		p = q;
	}
	for(i = 0;i < num;i++)
	printf("%3d",*(p+i));
	
	printf("\n");
	free(p);
	return 0;	
}</span>



使用const修飾指針變量


我們都知道使用const修飾一個(gè)基本數(shù)據(jù)類型的變量,可以讓變量存儲(chǔ)的值從頭到尾都不變

我們的程序不能進(jìn)行修改!不過修飾指針變量就有點(diǎn)差異了:

比如:

int a = 3,b = 4; const int *p = &a;

如果我們再添加一句代碼: p = &b;的話就會(huì)報(bào)錯(cuò)

如果添加: a = 5;代碼并不出錯(cuò),此時(shí) *p ==  a == 5;


分析結(jié)果:

使用const修飾指針時(shí),表明該指針是一個(gè)常量指針,它所指向的變量的值是可以修改的;

但是修改指針指向的地址則是錯(cuò)誤的!!!

在C許多的標(biāo)準(zhǔn)庫函數(shù)都將某些指針參數(shù)的類型前加上const,目的是保護(hù)參數(shù)!


ps:int *const p = &a;    const  int * const p = &a;   和上面的都是等價(jià)的!




本章小結(jié):

①函數(shù)與指針:

1.指針作為函數(shù)的形參: 指針參數(shù)對應(yīng)的實(shí)參需要為變量地址

2.指向函數(shù)的指針:函數(shù)的首地址稱為函數(shù)的指針,通過函數(shù)名可以找到并且執(zhí)行函數(shù)

3.指針函數(shù):返回值類型是一個(gè)指針

4.帶參數(shù)的主函數(shù): int main(int argc,char *argv[]) :形參依次為:記錄參數(shù)個(gè)數(shù)和存儲(chǔ)參數(shù)內(nèi)容的字符串?dāng)?shù)組


②指針數(shù)組

二維數(shù)組存放字符串與指針數(shù)組存放字符串的比較


③二級指針

指向指針變量的指針


④內(nèi)存的動(dòng)態(tài)分配:

1.內(nèi)存分配圖

2.C語言提供的四個(gè)內(nèi)存分配函數(shù)的使用:malloc(),calloc(),realloc(),free()的使用


⑤使用const修飾指針變量

可以修改的指向地址的變量的值,不能修改的是指針?biāo)赶虻牡刂?




    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多