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

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

這里寫(xiě)目錄標(biāo)題
  • 一級(jí)目錄
    • 整型數(shù)組
    • 字符數(shù)組
    • 字符串長(zhǎng)度
  • 指針和數(shù)組面試題
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

成都創(chuàng)新互聯(lián)是專業(yè)的延壽網(wǎng)站建設(shè)公司,延壽接單;提供成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行延壽網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!一級(jí)目錄 整型數(shù)組

sizeof(數(shù)組名)——計(jì)算整個(gè)數(shù)組的大小
&數(shù)組名——取出整個(gè)數(shù)組的地址
除此之外,所有的數(shù)組名都是數(shù)組首元素的地址

int main() {int a[] = {1,2,3,4 };
	printf("%d\n", sizeof(a));			//4*4=16
	printf("%d\n", sizeof(a + 0));		//a+0是第一個(gè)元素的地址,計(jì)算地址的大小
	printf("%d\n", sizeof(*a));			//*a是數(shù)組的第一個(gè)元素,計(jì)算第一個(gè)元素(整型)的大小
	printf("%d\n", sizeof(a + 1));		//a+1是第二個(gè)元素的地址,計(jì)算地址的大小
	printf("%d\n", sizeof(a[1]));		//計(jì)算第二個(gè)元素(整型)的大小
	printf("%d\n", sizeof(&a));			//計(jì)算一個(gè)地址的大小
	printf("%d\n", sizeof(*&a));		//取地址再解引用,計(jì)算數(shù)組的大小
	printf("%d\n", sizeof(&a + 1));		//數(shù)組后面的空間的地址的大小
	printf("%d\n", sizeof(&a[0]));		//第一個(gè)元素地址的大小
	printf("%d\n", sizeof(&a[0] + 1));	//第二個(gè)元素地址的大小
	return 0;
}
字符數(shù)組
char arr[] = {'a','b','c','d','e','f' };
	printf("%d\n", sizeof(arr));		//數(shù)組大小	
	printf("%d\n", sizeof(arr + 0));	//第一個(gè)元素地址的大小
	printf("%d\n", sizeof(*arr));		//第一個(gè)元素(字符)的大小
	printf("%d\n", sizeof(arr[1]));		//第二個(gè)元素(字符)的大小
	printf("%d\n", sizeof(&arr));		//地址的大小
	printf("%d\n", sizeof(&arr + 1));	//數(shù)組后面的空間的地址的大小
	printf("%d\n", sizeof(&arr[0] + 1));//第二個(gè)元素地址的大小
字符串長(zhǎng)度
char arr[] = {'a','b','c','d','e','f' };
	printf("%d\n", strlen(arr));		//找'\0',隨機(jī)值	
	printf("%d\n", strlen(arr + 0));	//隨機(jī)值
	printf("%d\n", strlen(*arr));		//把a(bǔ)(97)當(dāng)作地址解引用,出錯(cuò)
	printf("%d\n", strlen(arr[1]));		//把b(98)當(dāng)作地址,出錯(cuò)
	printf("%d\n", strlen(&arr));		//隨機(jī)值
	printf("%d\n", strlen(&arr + 1));	//數(shù)組后面的空間找'\0',隨機(jī)值-6
	printf("%d\n", strlen(&arr[0] + 1));//第二個(gè)元素開(kāi)始找'\0',隨機(jī)值-1
char arr[] = "abcdef";
	printf("%d\n", sizeof(arr));		//數(shù)組大小,7	
	printf("%d\n", sizeof(arr + 0));	//第一個(gè)元素地址的大小
	printf("%d\n", sizeof(*arr));		//第一個(gè)元素(字符)的大小
	printf("%d\n", sizeof(arr[1]));		//第二個(gè)元素(字符)的大小
	printf("%d\n", sizeof(&arr));		//地址的大小
	printf("%d\n", sizeof(&arr + 1));	//數(shù)組后面的空間的地址的大小
	printf("%d\n", sizeof(&arr[0] + 1));//第二個(gè)元素地址的大小
char arr[] = "abcdef";
	printf("%d\n", strlen(arr));		//數(shù)組長(zhǎng)度,6	
	printf("%d\n", strlen(arr + 0));	//同上
	printf("%d\n", strlen(*arr));		//把a(bǔ)(97)當(dāng)作地址解引用,出錯(cuò)
	printf("%d\n", strlen(arr[1]));		//把b(98)當(dāng)作地址,出錯(cuò)
	printf("%d\n", strlen(&arr));		//6
	printf("%d\n", strlen(&arr + 1));	//數(shù)組后面的空間找'\0',隨機(jī)值
	printf("%d\n", strlen(&arr[0] + 1));//第二個(gè)元素開(kāi)始找'\0',5
char* p = "abcdef";
	printf("%d\n", sizeof(p));		//指針變量大小
	printf("%d\n", sizeof(p + 1));	//第二個(gè)元素指針變量的大小
	printf("%d\n", sizeof(*p));		//第一個(gè)元素(字符)的大小
	printf("%d\n", sizeof(p[0]));		//第一個(gè)元素(字符)的大小
	printf("%d\n", sizeof(&p));		//地址的大小
	printf("%d\n", sizeof(&p + 1));	//地址的大小
	printf("%d\n", sizeof(&p[0] + 1));//第二個(gè)元素地址的大小
char* p = "abcdef";
	printf("%d\n", strlen(p));		//數(shù)組長(zhǎng)度,6
	printf("%d\n", strlen(p + 1));	//5
	printf("%d\n", strlen(*p));		//第一個(gè)元素(ASCII碼),出錯(cuò)
	printf("%d\n", strlen(p[0]));	//同上
	printf("%d\n", strlen(&p));		//從p的位置開(kāi)始找'\0',隨機(jī)值
	printf("%d\n", strlen(&p + 1));	//從p的位置加4(或8)開(kāi)始找'\0',隨機(jī)值
	printf("%d\n", strlen(&p[0] + 1));//5
//二維數(shù)組
	int a[3][4] = {0 };
	printf("%d\n", sizeof(a));				//3*4*sizeof(int)=48
	printf("%d\n", sizeof(a[0][0]));		//第一行第一個(gè)元素的地址,4
	printf("%d\n", sizeof(a[0]));			//a[0]表示整個(gè)第一行,計(jì)算第一行的大小4*sizeof(int)=16
	printf("%d\n", sizeof(a[0] + 1));		//a[0]表示第一行第一個(gè)元素的地址,a[0]+1表示第二個(gè)元素的地址,計(jì)算地址的大小
	printf("%d\n", sizeof(*(a[0] + 1)));	//計(jì)算第一行第二個(gè)元素(整型)的大小
	printf("%d\n", sizeof(a + 1));			//a是二維數(shù)組的數(shù)組名,表示二維數(shù)組首元素的地址,即第一行的地址,a+1表示第二行地址的大小
	printf("%d\n", sizeof(*(a + 1)));		//取地址再解引用,計(jì)算第二行的大小
	printf("%d\n", sizeof(&a[0] + 1));		//第二行的地址的大小
	printf("%d\n", sizeof(*(&a[0] + 1)));	//第二行的大小
	printf("%d\n", sizeof(*a));				//第一行的大小
	printf("%d\n", sizeof(a[3]));			//一行的大小,sizeof()內(nèi)部是不計(jì)算的,只根據(jù)類型計(jì)算大小
指針和數(shù)組面試題
int main() {char str1[] = "hello";
	char str2[] = "hello";
	char* str3 = "hello";
	char* str4 = "hello";
	if (str1 == str2) {printf("str1 and str2 are same.\n");
	}
	if (str3 == str4) {printf("str3 and str4 are same.\n");
	}
	return 0;
}

str1[]和str2[]是兩個(gè)數(shù)組,str1和str2代表數(shù)組首元素地址,比較的是兩個(gè)不同的地址
str3和str4是兩個(gè)指針變量,里面寫(xiě)入了常量字符串,比較的是兩個(gè)相同的地址

char* ps="hello";
* ps='w';

會(huì)報(bào)錯(cuò),因?yàn)槌A孔址膬?nèi)容不能修改

2
int main() {int a[5] = {1,2,3,4,5 };
	int* ptr = (int*)(&a + 1);
	printf("%d,%d", *(a + 1), *(ptr - 1));
	//a+1表示第二個(gè)元素地址,解引用為第二個(gè)元素
	//*ptr表示數(shù)組之后空間,*(ptr-1)向前移一個(gè)整型,表示數(shù)組最后一個(gè)元素
	return 0;
}
3
struct Test {int Num;
	char* pcName;
	short sDate;
	char cha[2];
	short sBa[4];
}*p;				//假設(shè)p的值為0x100000,結(jié)構(gòu)體Test類型的變量大小是20字節(jié)
int main() {printf("%p\n", p + 0x1);					//指針+1,跳過(guò)20字節(jié),即0x14
	printf("%p\n", (unsigned long)p + 0x1);		//整型+1
	printf("%p\n", (unsigned int*)p + 0x1);		//+1整型,即+4
	return 0;
}

指針類型決定了指針的運(yùn)算

4
int main() {int a[4] = {1,2,3,4 };
	int* ptr1 = (int*)(&a + 1);			//數(shù)組后面空間
	int* ptr2 = (int*)((int)a + 1);		//地址差1,實(shí)際偏移一個(gè)字節(jié),再整形指針解引用
	printf("%x ", ptr1[-1]);			//*(ptr1-1)
	printf("%x", *ptr2);				//如果是小端存儲(chǔ)則為(01) 00 00 00 02
	return 0;
}
5
int main() {int a[3][2] = {(0,1),(2,3),(4,5) };	//逗號(hào)表達(dá)式,(1,3,5,0,0,0)
	int* p;
	p = a[0];
	printf("%d", p[0]);						//1
	return 0;
}
6
int main() {int a[5][5];	//5行5列
	int(*p)[4];		//p指向一個(gè)地址
	p = a;
	printf("%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);
	//p指向a,p+1指向a+4,p+2指向a+8...
	//p[4][2]指向a+19
	//指針-指針=兩個(gè)指針之間元素個(gè)數(shù),-4
	//10000000 00000000 00000000 00000100
	//11111111 11111111 11111111 11111011
	//11111111 11111111 11111111 11111100即FFFFFFFC
	return 0;
}
7
int main() {int a[2][5] = {1,2,3,4,5,6,7,8,9,10 };
	int* ptr1 = (int*)(&a + 1);		//數(shù)組后面空間
	int* ptr2 = (int*)(*(a + 1));	//第一行后面空間
	printf("%d,%d", *(ptr1 - 1), *(ptr2 - 1));	//10,5
	return 0;
}
8
int main() {char* a[] = {"work","at","ali" };
	char** pa = a;
	pa++;
	printf("%s\n", *pa);	//at
	return 0;
}
9
int main() {char* c[] = {"enter","new","point","first" };
	char** cp[] = {c + 3,c + 2,c + 1,c };	//交叉指向c
	char*** cpp = cp;						//cpp放cp地址
	printf("%s\n", **++cpp);				//cp中c+2→point
	printf("%s\n", *-- * ++cpp + 3);		//cp中c+1,進(jìn)行--得到c→enter,進(jìn)行+3打印e之后的內(nèi)容er
	printf("%s\n", *cpp[-2] + 3);			//**(cpp-2)得到c+3→first,進(jìn)行+3打印s之后的內(nèi)容st
	printf("%s\n", cpp[-1][-1] + 1);		//*(cpp-1)得到c+2,*(*(cpp-1)-1)得到new的地址,進(jìn)行+1后打印n之后的內(nèi)容ew
	return 0;
}

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

本文名稱:【C語(yǔ)言】指針進(jìn)階(二)-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://chinadenli.net/article24/doooje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄網(wǎng)站導(dǎo)航小程序開(kāi)發(fā)響應(yīng)式網(wǎng)站品牌網(wǎng)站設(shè)計(jì)品牌網(wǎng)站制作

廣告

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

外貿(mào)網(wǎng)站制作