欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

【C語言】指針進(jìn)階(1)-創(chuàng)新互聯(lián)

目錄

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),江北企業(yè)網(wǎng)站建設(shè),江北品牌網(wǎng)站建設(shè),網(wǎng)站定制,江北網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,江北網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

1.字符指針

2.指針數(shù)組

3.數(shù)組指針

4.指針參數(shù)

5.函數(shù)指針

6.函數(shù)指針數(shù)組

6.1模擬加減乘除計(jì)算器

6.2指向函數(shù)指針數(shù)組的指針


1.字符指針

int main()
{
	const char* p = "abcdefg";
	//*p = 'hijklmn';
	printf("%s ", p);
	printf("%c\n", *p);
	return 0;
}

這里的p是一個(gè)字符指針,指向字符串首字母的地址,加上const后無法修改,更加嚴(yán)謹(jǐn)。

結(jié)果為 abcdefg a??

那字符指針和字符串以及字符數(shù)組有什么區(qū)別呢?來道改編的面試題看看叭~

int main()
{
	char str1[] = "hello world.";
	char str2[] = "hello world.";
	const char* str3 = "hello world.";
	const char* str4 = "hello world.";
	if (str1 == str2)
		printf("str1 and str2 are same\n");
	else
		printf("str1 and str2 are not same\n");
	if (str3 == str4)
		printf("str3 and str4 are same\n");
	else
		printf("str3 and str4 are not same\n");
	return 0;
}

str1 和 str2 是兩個(gè)不同的數(shù)組,相同的常量字符串去初始化不同的數(shù)組的時(shí)候會(huì)開辟出不同的內(nèi)存塊,各自獨(dú)立占用一塊空間;str3 和 str4 指向同一個(gè)常量字符(無法改變),當(dāng)幾個(gè)指針指向同一個(gè)字符串的時(shí)候,實(shí)際會(huì)指向同一塊內(nèi)存。

再來看這道面試題,str1 和 str2 都指向的是數(shù)組首元素的地址,內(nèi)存開辟的空間不同,數(shù)組首元素的地址肯定不同,所以 str1 != str2?;而 str3 和 str4 指向的是同一塊內(nèi)存,所以 str3 == str4。

2.指針數(shù)組

不同于一維數(shù)組和二維數(shù)組,指針數(shù)組中各個(gè)元素之間地址不是連續(xù)的。

int* arr1[10];? ? ?//一級整形指針的數(shù)組

char *arr2[10];? //一級字符指針的數(shù)組

char **arr[10];? ?//二級字符指針的數(shù)組

先來兩個(gè)例子練練手:

int main()
{
	//加const更嚴(yán)謹(jǐn),不加也可
	const char* arr[4] = { "abc","def","ghi","jkl" };
	int i = 0;
	for (i = 0; i< 4; i++)
	{
		printf("%s\n", arr[i]);
	}
	return 0;
}
int main()
{
	int arr1[5] = { 1,2,3,4,5 };
	int arr2[5] = { 2,3,4,5,6 };
	int arr3[5] = { 3,4,5,6,7 };
	int* arr[3] = { arr1,arr2,arr3 };
	int i, j;
	for (i = 0; i< 3; i++)
	{
		for (j = 0; j< 5; j++)
		{
			printf("%d\n", arr[i][j]);//這里與二維數(shù)組很像
		}                //*(arr[i]+j)或*(*(arr+i)+j)也可
		printf("\n");
	}
	return 0;
}

3.數(shù)組指針

數(shù)組指針——存放數(shù)組地址的指針——指向數(shù)組的指針
格式:int (*p)[10] = &arr; 其中 *p?相當(dāng)于 arr?

arr 只是首元素的地址,&arr 取出的是數(shù)組的地址,只有數(shù)組的地址需要數(shù)組來接收;p?先和 * 結(jié)合,說明 p?是一個(gè)指針變量,指向一個(gè)大小為10個(gè)的 int 型的數(shù)組。
注意:[ ]的優(yōu)先級高于 * ,所以必須加上()來保證 p?先和 * 結(jié)合。

//一維
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int(*p)[10] = &arr;
	int i = 0;
	for (i = 0; i< 10; i++)
	{
		printf("%d ", (*p)[i]);
	}                //*p相當(dāng)于arr,即arr[i]
	return 0;
}

//二維
void Print(int(*p)[4], int row, int col)
{        //指向第一行的四個(gè)元素
	int i, j;
	for (i = 0; i< row; i++)
	{
		for (j = 0; j< col; j++)
		{
			printf("%d", (*(p + i))[j]);
		}               //p[i][j]也可
		printf("\n");
	}
}
int main()
{
	int arr[3][4] = { {1,2,3,4},{2,3,4,5},{3,4,5,6} };
	Print(arr, 3, 4);//二維數(shù)組名是第一行的地址
	return 0;
}
int arr[10]整形數(shù)組,數(shù)組里有10個(gè) int 類型的元素
int *parr1[10]指針數(shù)組,數(shù)組里有10個(gè) int* 類型的元素
int (*parr2)[10]數(shù)組指針,指向一個(gè)有10個(gè) int 類型元素的數(shù)組,
int (*parr3[10])[5]數(shù)組指針數(shù)組,parr3是有10個(gè) int(*)[5]的數(shù)組指針類型元素的數(shù)組
4.指針參數(shù)
//一級指針傳參
void test(int* p)
{
	;
}
int main()
{
	int n = 10;
	int* p = &n;
	int arr[10];
	test(&n);//ok
	test(p);//ok
	test(arr);//ok
	return 0;
}

//二級指針傳參
void test(int** p)
{
	;
}
int main()
{
	int n = 10;
	int* p = &n;
	int** pp = &p;
    int* arr[10];
	test(&p);//ok
	test(pp);//ok
    test(arr);//ok
	return 0;
}

這里真的是很懵,還是要多加練習(xí)?。?!

5.函數(shù)指針

函數(shù)指針——指向函數(shù)的指針

格式:int (*pf)(int, int) = &Add;

與數(shù)組不同,&函數(shù)名 和 函數(shù)名 都是函數(shù)的地址。

int Add(int x, int y)
{
	return x + y;
}
int main()
{
	printf("Add的地址為:%p\n", &Add);
	int (*pf)(int, int) = &Add;//pf為函數(shù)指針,存放函數(shù)地址
							   //&Add 等價(jià)于 Add
	int ret1 = Add(2, 3);
	int ret2 = (*pf)(2, 3);//*pf = Add
	int ret3 = pf(2, 3);//pf = Add
	int ret4 = (******pf)(2, 3);//*只是個(gè)擺設(shè),無論前面有多少個(gè)*程序都不會(huì)用
	printf("%d %d %d %d\n", ret1, ret2, ret3, ret4);
	return 0;                  
}

6.函數(shù)指針數(shù)組

字符指針數(shù)組:char* arr1[10];

整型指針數(shù)組:int* arr2[10];

函數(shù)指針數(shù)組:int (*arr3[5]) (int , int);

int (*pf[5])(const char*) = {&Add};

6.1模擬加減乘除計(jì)算器
#define _CRT_SECURE_NO_WARNINGS
#include//用宏定義更加簡便
//#define Add(x,y) (x+y)
//#define Sub(x,y) (x-y)
//#define Mul(x,y) (x*y)
//#define Div(x,y) (x/y)
int Add(int x, int y)
{
	return x + y;
}int Sub(int x, int y)
{
	return x - y;
}int Mul(int x, int y)
{
	return x * y;
}int Div(int x, int y)
{
	return x / y;
}
void menu()
{
	printf("********** Ji Suan Qi **********\n");
	printf("********************************\n");
	printf("*******  1.add    2.sub  *******\n");
	printf("*******  3.mul    4.div  *******\n");
	printf("*******      0.exit      *******\n");
	printf("********************************\n");
}
int main()
{
	int input = 0;
	int x, y;
	do
	{
		menu();
		printf("請選擇:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("請輸入兩個(gè)數(shù):");
			scanf("%d%d", &x, &y);
			printf("%d\n", Add(x, y));
			break;
		case 2:
			printf("請輸入兩個(gè)數(shù):");
			scanf("%d%d", &x, &y);
			printf("%d\n", Sub(x, y));
			break;
		case 3:
			printf("請輸入兩個(gè)數(shù):");
			scanf("%d%d", &x, &y);
			printf("%d\n", Mul(x, y));
			break;
		case 4:
			printf("請輸入兩個(gè)數(shù):");
			scanf("%d%d", &x, &y);
			printf("%d\n", Div(x, y));
			break;
		case 0:
			printf("退出計(jì)算器\n");
			break;
		default:
			printf("選擇錯(cuò)誤,請重新選擇\n");
			break;
		}
	} while (input);
	
	return 0;
}

我們發(fā)現(xiàn),這樣寫雖然邏輯清晰,但過程太過繁雜,而且不論是函數(shù)還是case語句格式相通,既然這樣,不妨試一試函數(shù)指針數(shù)組,看看能否簡化程序。

#define _CRT_SECURE_NO_WARNINGS
#includeint Add(int x, int y)
{
	return x + y;
}int Sub(int x, int y)
{
	return x - y;
}int Mul(int x, int y)
{
	return x * y;
}int Div(int x, int y)
{
	return x / y;
}
void menu()
{
	printf("********** Ji Suan Qi **********\n");
	printf("********************************\n");
	printf("*******  1.add    2.sub  *******\n");
	printf("*******  3.mul    4.div  *******\n");
	printf("*******      0.exit      *******\n");
	printf("********************************\n");
}
int(*pf[5])(int, int) = { 0,Add,Sub,Mul,Div };//第一個(gè)元素放0是為了讓后面元素下表對應(yīng)菜單選項(xiàng)
int main()
{
	int input = 0;
	int x, y;
	do
	{
		menu();
		printf("請選擇:");
		scanf("%d", &input);
		if (input == 0)
		{
			printf("退出計(jì)算器\n");
			break;
		}
		else if (input >= 1 && input<= 4)
		{
			printf("請輸入兩個(gè)數(shù):");
			scanf("%d%d", &x, &y);
			int ret = pf[input](x, y);//?。?!
			printf("%d\n", ret);
		}
		else
			printf("輸入錯(cuò)誤\n");
	} while (input);
	return 0;
}

答案是肯定的,使用函數(shù)指針數(shù)組后case語句可以省略,代碼的可讀性更強(qiáng)。

6.2指向函數(shù)指針數(shù)組的指針

(無限套娃 o.O ……)

函數(shù)指針數(shù)組:int (*pf[5])(int,int);

指向函數(shù)指針數(shù)組的指針:int? ( * ( *ppf ) [5] ) ( int , int ) = &pf;

看變量類型: 把變量名去掉;看數(shù)組中元素的類型:把()里*之后的部分去掉。


難哇,學(xué)?。?/p>

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)頁題目:【C語言】指針進(jìn)階(1)-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://chinadenli.net/article20/dcphjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、搜索引擎優(yōu)化、關(guān)鍵詞優(yōu)化、網(wǎng)站收錄、做網(wǎng)站、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
欧美国产日韩在线综合| 老富婆找帅哥按摩抠逼视频| 五月婷婷综合激情啪啪| 色婷婷激情五月天丁香| 亚洲天堂精品1024| 中文字日产幕码三区国产| 久久精品国产亚洲av久按摩| 一二区不卡不卡在线观看 | 国产精品久久久久久久久久久痴汉| 欧美一级黄片免费视频| 国产日本欧美特黄在线观看| 国产a天堂一区二区专区| 国产91麻豆精品成人区| 国产午夜免费在线视频| 久久热这里只有精品视频| 久久99亚洲小姐精品综合| 欧美午夜视频免费观看| 日本高清一道一二三区四五区| 免费性欧美重口味黄色| 亚洲第一视频少妇人妻系列| 国产成人午夜在线视频| 成人精品一区二区三区综合| 中文字幕乱码亚洲三区| 亚洲精品中文字幕欧美| 黄色日韩欧美在线观看| 色小姐干香蕉在线综合网 | 九九热最新视频免费观看| 国产a天堂一区二区专区| 国产av精品高清一区二区三区| 色小姐干香蕉在线综合网| 色丁香一区二区黑人巨大| 国产级别精品一区二区视频| 日韩国产亚洲欧美激情| 国产日本欧美韩国在线| 日韩成人h视频在线观看| 日本三区不卡高清更新二区| 国产成人精品一区二三区在线观看| 大香蕉伊人一区二区三区| 99精品国产自在现线观看| 亚洲中文字幕在线综合视频| 91一区国产中文字幕|