真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C提高1內(nèi)存四區(qū)變量本質(zhì)棧開口方向指針鐵律1-創(chuàng)新互聯(lián)

C 提高第一天復(fù)習(xí)

創(chuàng)新互聯(lián)致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營銷,包括成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、SEO優(yōu)化、網(wǎng)絡(luò)推廣、整站優(yōu)化營銷策劃推廣、電子商務(wù)、移動互聯(lián)網(wǎng)營銷等。創(chuàng)新互聯(lián)為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制及解決方案,創(chuàng)新互聯(lián)核心團(tuán)隊十年專注互聯(lián)網(wǎng)開發(fā),積累了豐富的網(wǎng)站經(jīng)驗(yàn),為廣大企業(yè)客戶提供一站式企業(yè)網(wǎng)站建設(shè)服務(wù),在網(wǎng)站建設(shè)行業(yè)內(nèi)樹立了良好口碑。

內(nèi)存四區(qū),變量常量的本質(zhì),函數(shù)調(diào)用模型,棧開口方向,指針鐵律1,指針是一種數(shù)據(jù)類型

C 提高學(xué)員標(biāo)準(zhǔn):寫一個標(biāo)準(zhǔn)的冒泡排序

選擇法或者冒泡法排序

在一個函數(shù)內(nèi)排序

通過函數(shù)調(diào)用的方式排序

數(shù)組做函數(shù)參數(shù)的技術(shù)盲點(diǎn)和推演

#include 
#include 
#include 

int main()
{
	int i = 0;
	int j = 0;
	int tmp = 0;
	int a[] = {3,66,54,32,11,22,99,2334,32};
	
	for (i = 0; i < sizeof(a) / sizeof(int); i++)
	{
		printf("%d ",a[i]);
	}
	printf("\n", a[i]);

	for (i = 0; i < sizeof(a) / sizeof(int); i++)
	{
		for (j = i+1; j < sizeof(a) / sizeof(int); j++)
		{
			if (a[i] > a[j])
			{
				tmp = a[i];
				a[i] = a[j];
				a[j] = tmp;
			}
		}
	}

	for (i = 0; i < sizeof(a) / sizeof(int); i++)
	{
		printf("%d ", a[i]);
	}
	printf("\n", a[i]);



	system("pause");
}

編譯運(yùn)行:
3 66 54 32 11 22 99 2334 32
3 11 22 32 32 54 66 99 2334
請按任意鍵繼續(xù). . .

冒泡程序,優(yōu)化輸出與排序 與 函數(shù)的數(shù)組參數(shù)問題

#include 
#include 
#include 

void printfArray(int array[], int len)
{
	int i;
	for (i = 0; i < len; i++)
	{
		printf("%d ", array[i]);
	}
	printf("\n", array[i]);
}

//數(shù)組做函數(shù)的參數(shù)的退回問題,退回為一個指針
//結(jié)論:把數(shù)組內(nèi)存的首地址和有效長度傳給被調(diào)用的函數(shù)
//本質(zhì):函數(shù)中的數(shù)組形參,編譯器會把它當(dāng)成指針處理
void sortArray(int array[], int len)
{
	int i, j, tmp;
	for (i = 0; i  array[j])
			{
				tmp = array[i];
				array[i] = array[j];
				array[j] = tmp;
			}
		}
	}
}


int main()
{

	int a[] = {3,66,54,32,11,22,99,2334,32};
	int len = sizeof(a) / sizeof(int);

	printfArray(a, len);
	sortArray(a,len);
	printfArray(a, len);
	
	system("pause");
}



編譯運(yùn)行:
3 66 54 32 11 22 99 2334 32
3 11 22 32 32 54 66 99 2334
請按任意鍵繼續(xù). . .

數(shù)據(jù)類型概念:

“類型”是對數(shù)據(jù)的抽象

類型相同的數(shù)據(jù)有相同的表示形式、存儲格式以及相關(guān)的操作

程序中使用的所有數(shù)據(jù)都必定屬于某一種數(shù)據(jù)類型

C 提高1  內(nèi)存四區(qū) 變量本質(zhì) 棧開口方向 指針鐵律1

基本數(shù)據(jù)類型:typedef 數(shù)組與地址

#include 
#include 
#include 


struct teacher1{
	char name[64];
	int age;
}Teacher1;

//使用typedef,以后定義就是這樣了 Teacher2 t2;
typedef struct teacher2{
	char name[64];
	int age;
}Teacher2;


int main()
{
	
	int b[10];
	printf("b:%d , b+1:%d \n", b, b + 1);
	printf("&b:%d, &b+1:%d \n", &b, &b + 1);
	// b 代表數(shù)組首元素的地址
	// &b代表整個數(shù)組的地址
	// &b+1代表跨過整個數(shù)組地址


	struct teacher1 t1;
	Teacher1.age = 0;
	Teacher2 t2;

	typedef int u32;
	printf("u32 =%d \n",sizeof(u32));


	system("pause");
}
編譯運(yùn)行:
b:3603504 , b+1:3603508
&b:3603504, &b+1:3603544
u32 =4
請按任意鍵繼續(xù). . .

數(shù)據(jù)類型的本質(zhì)思考

思考數(shù)據(jù)類型和內(nèi)存有關(guān)系嗎?

C/C++為什么會引入數(shù)據(jù)類型?

數(shù)據(jù)類型的本質(zhì)

數(shù)據(jù)類型可理解為創(chuàng)建變量的模具(模子);是固定內(nèi)存大小的別名。

數(shù)據(jù)類型的作用:編譯器預(yù)算對象(變量)分配的內(nèi)存空間大小

程序舉例,如何求數(shù)據(jù)類型的大小  sizeof(int *)

請問:數(shù)據(jù)類型可以有別名嗎?數(shù)據(jù)類型可以自定義嗎?(typedef)

C 提高1  內(nèi)存四區(qū) 變量本質(zhì) 棧開口方向 指針鐵律1

數(shù)據(jù)類型大小C程序:

#include 
#include 

int main()
{
	int a = 10;
	int b[10] ;
	printf("int a:%d \n", sizeof(a));
	printf("int a:%d \n", sizeof(int *));
	printf("int b:%d \n", sizeof(b));
	printf("int b:%d \n", sizeof(b[0]));
	printf("int b:%d \n", sizeof(*b));
	printf("hello.....\n");
	return 0;
} 
編譯運(yùn)行:
C:\Users\chunli>gcc main.c & a
int a:4
int a:4
int b:40
int b:4
int b:4
hello.....

常量的探討:

#include 
#include 
#include 


char * getstr1()
{
	char *p = "1234";
	return p;
}

char * getstr2()
{
	char *p = "5678";
	return p;
}

int main()
{
	char *p1 = NULL;
	char *p2 = NULL;
	p1 = getstr1();
	p2 = getstr2();
	printf("%s,%s \n", p1, p2);
	printf("%d,%d \n", p1, p2);
	system("pause");
}

編譯運(yùn)行:
1234,5678
14309464,14309644
請按任意鍵繼續(xù). . .

改一改:

#include 
#include 
#include 


char * getstr1()
{
	char *p = "1234";
	return p;
}

char * getstr2()
{
	char *p = "1234";
	return p;
}

int main()
{
	char *p1 = NULL;
	char *p2 = NULL;
	p1 = getstr1();
	p2 = getstr2();
	printf("%s,%s \n", p1, p2);
	printf("%d,%d \n", p1, p2);
	system("pause");
}

編譯運(yùn)行:
1234,1234
2054232,2054232
請按任意鍵繼續(xù). .

堆棧變量,函數(shù)返回一個被析構(gòu)的內(nèi)存空間塊

#include 
#include 
#include 

//堆
char * getmem(int size)
{
	char *p = NULL;
	p = (char *)malloc(size);
	return p;
}

//棧
//return 不是把內(nèi)存塊返回出來,而是把首地址返回了
char * getmem2()
{
	char p[20];
	strcpy(p, "haha2 \n");
	return p;	//【危險!】p即將釋放,但是地址返回去來了。
}


int main()
{
	char  *p = NULL;
	p = getmem(20);
	strcpy(p, "haha1 \n");
	printf("%s",p);
	free(p);
	p = NULL;
	
	p = getmem2();//返回了一個被析構(gòu)的數(shù)據(jù)塊
	printf("%s", p);//不應(yīng)該這么做!


	system("pause");
}

編譯運(yùn)行:
haha1
haha2
請按任意鍵繼續(xù). . .

棧的開口方向:

#include 
#include 
#include 


int main()
{

	int a;
	int b;
	printf("&a = %d \n", &a);
	printf("&b = %d \n", &b);
	system("pause");
}
編譯運(yùn)行:
C:\Users\chunli>gcc -o main.exe main.c & main
&a = 2686652
&b = 2686648
請按任意鍵繼續(xù). . .

C 提高1  內(nèi)存四區(qū) 變量本質(zhì) 棧開口方向 指針鐵律1

數(shù)組基地址永遠(yuǎn)都是在下面:

C 提高1  內(nèi)存四區(qū) 變量本質(zhì) 棧開口方向 指針鐵律1

指針鐵律1:指針是一種數(shù)據(jù)類型


#include 
#include 
#include 

//*p 在等號的左邊 修改內(nèi)存
//*p 在等號的右邊 讀取內(nèi)存


char * getstr()
{
	int *tmp = "hello \n";//	常量區(qū)
	return tmp;
}

int main()
{

	int a;
	char *p1 = 100;//分配4個字節(jié)
	p1 = &a;
	*p1 = 20;	//*就像一把鑰匙,找到這個地址,并修改它
	printf("%d  \n", sizeof(p1));
	printf("%d  \n", *p1);

	int b = 0;
	b = *p1;
	printf("%d  \n", b);


	char p2 = (char *)malloc(100);
	char p3 = (char *)malloc(100);

	char *p4 = getstr();
//	*(p4 + 2) = 'K';  因?yàn)榉祷氐氖浅A?,不能修改
	printf("%s",p4);
	system("pause");
}

指針經(jīng)典話語:

1,指針指向誰,就把誰的地址賦給指針;

2,指針變量 和 它指向的內(nèi)存空間變量是兩個不同的概念

3,理解指針的關(guān)鍵是內(nèi)存,沒有內(nèi)存哪里來的指針

變量的本質(zhì)是一個固定大小的數(shù)據(jù)塊,變量名就是數(shù)據(jù)塊的編號

內(nèi)存的使用范圍:

main函數(shù)可以在棧分配內(nèi)存/堆分配內(nèi)存/全局分配內(nèi)存,可以給子函數(shù)使用

子函數(shù)在棧分配的內(nèi)存不能給主函數(shù)使用,但是堆內(nèi)存與全局變量是可以給main使用

編譯器會為每個程序分配一個內(nèi)存4區(qū),主函數(shù)與子函數(shù)公用這個內(nèi)存4區(qū)

建立正確程序運(yùn)行內(nèi)存布局圖是學(xué)好C的關(guān)鍵!

指針鐵律1:指針是一種數(shù)據(jù)類型

1)指針也是一種變量,占有內(nèi)存空間,用來保存內(nèi)存地址

2)*p 操作內(nèi)存;

3)*就像一把鑰匙,通過一個地址(&a),去修改a變量的標(biāo)示的內(nèi)存空間

4)不斷的給指針賦值,相當(dāng)于不停的改變指針的指向。

5) 指針是一種數(shù)據(jù)類型,是指它指向內(nèi)存空間的數(shù)據(jù)類型

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


網(wǎng)站標(biāo)題:C提高1內(nèi)存四區(qū)變量本質(zhì)棧開口方向指針鐵律1-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://weahome.cn/article/iespe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部