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

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

C語(yǔ)言指針進(jìn)階學(xué)完指針必看練習(xí)題詳解-創(chuàng)新互聯(lián)

該篇與上篇銜接

創(chuàng)新互聯(lián)"三網(wǎng)合一"的企業(yè)建站思路。企業(yè)可建設(shè)擁有電腦版、微信版、手機(jī)版的企業(yè)網(wǎng)站。實(shí)現(xiàn)跨屏營(yíng)銷(xiāo),產(chǎn)品發(fā)布一步更新,電腦網(wǎng)絡(luò)+移動(dòng)網(wǎng)絡(luò)一網(wǎng)打盡,滿(mǎn)足企業(yè)的營(yíng)銷(xiāo)需求!創(chuàng)新互聯(lián)具備承接各種類(lèi)型的成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站項(xiàng)目的能力。經(jīng)過(guò)10年的努力的開(kāi)拓,為不同行業(yè)的企事業(yè)單位提供了優(yōu)質(zhì)的服務(wù),并獲得了客戶(hù)的一致好評(píng)。二維數(shù)組
int main()
{int a[3][4] = {0 };
	printf("%d\n", sizeof(a));//48   3*4*sizeof(int)
	printf("%d\n", sizeof(a[0][0]));//4   第一行第一個(gè)元素  就是整形大小
	printf("%d\n", sizeof(a[0]));//16
	//a[0]就可以理解為 第一行數(shù)組名 
	//sizeof(a[0])數(shù)組名a【0】單獨(dú)放在sizeof內(nèi)部 a【0】表示整個(gè)第一行
	//sizeof(a[0])計(jì)算的就是第一行的大小

	printf("%d\n", sizeof(a[0]+1));//4/8  符合sizeof規(guī)則第三條 所以他叔第一行第一個(gè)元素的地址
	printf("%d\n", sizeof( * (a[0] + 1)));//4     第一行第二個(gè)解引用 , 的到元素
	printf("%d\n", sizeof(a+1));//4/8   對(duì)于二維數(shù)組來(lái)說(shuō) 首元素就是第一行
	printf("%d\n", sizeof(*(a+1)));//16   *(a+1)->a[1]
	printf("%d\n", sizeof(&a[0]+1));//  4/8
	printf("%d\n", sizeof(*(&a[0] + 1)));// 16
	printf("%d\n", sizeof(*a));// 16    a是代表整個(gè)數(shù)組  *a 代表的是對(duì)第一行解應(yīng)用 得到的是第一行的數(shù)組
	printf("%d\n", sizeof(a[3]));//16  既然a[3]存在它的類(lèi)型就是int()[4] 假象他是一個(gè)第四行











	

	return 0;
}

int main()
{short s = 5;
	int a = 4;
	printf("%d", sizeof(s = a + 6));//2   最后的結(jié)果由short而定  short2個(gè)字節(jié)。sizeof內(nèi)部表達(dá)式不參與運(yùn)算

	printf("%d", s);//5



	return 0;
}

第三個(gè)解析
在這里插入圖片描述

指針筆試題
int main()
{int a[5] = {1, 2, 3, 4, 5 };
    int *ptr = (int *)(&a + 1);
    printf( "%d,%d", *(a + 1), *(ptr - 1));
    return 0;   //第一個(gè)打印:a的地址沒(méi)變 指向一 加一指向2的地址
}
//程序的結(jié)果是什么?
//2  5

解析
在這里插入圖片描述


//由于我還沒(méi)介紹過(guò)結(jié)構(gòu)體,這里告知結(jié)構(gòu)體的大小是20個(gè)字節(jié)
struct Test
{int Num;
	char* pcName;
	short sDate;
	char cha[2];
	short sBa[4];
}*p;
//假設(shè)p 的值為0x100000。 如下表表達(dá)式的值分別為多少?
//已知,結(jié)構(gòu)體Test類(lèi)型的變量大小是20個(gè)字節(jié)
int main()
{	printf("%p\n", p + 0x1);//相當(dāng)于p+1   加1跳過(guò)一個(gè)類(lèi)型 結(jié)構(gòu)體類(lèi)型20個(gè)字節(jié)直接跳過(guò)所以是加20  0x100000+20=0x100014   4成16的0次方。。。
	printf("%p\n", (unsigned long)p + 0x1);//0x100001   正數(shù)加1就是1  不跟指針一樣
	printf("%p\n", (unsigned int*)p + 0x1);//0x100004    +4  一個(gè)整形字節(jié)
	return 0;
}

int main()
{int a[4] = {1, 2, 3, 4 };
    int* ptr1 = (int*)(&a + 1);
    int* ptr2 = (int*)((int)a + 1);// a轉(zhuǎn)化為整形  一個(gè)整形4個(gè)字節(jié)   加1是加一個(gè)字節(jié)

    printf("%x,%x", ptr1[-1], *ptr2);
    return 0;
}

在這里插入圖片描述
在這里插入圖片描述
%x打印打印16進(jìn)制 只打印有效數(shù)組所以結(jié)果為4 2000000


#includeint main()
{int a[3][2] = {(0, 1), (2, 3), (4, 5) };
    int* p;
    p = a[0];
    printf("%d", p[0]);
    return 0;
}

解析

#includeint main()
{int a[3][2] = {(0, 1), (2, 3), (4, 5) };//用了小括號(hào)表示是逗號(hào)表達(dá)式  相當(dāng)于就放了{(lán)1,3,5}第一行放了1  3  第二行5 0 第三行00
    int* p;
    p = a[0];//沒(méi)有& 也沒(méi)放在sizeof內(nèi)部 所以他代表首元素地址  1 放到了整形指針
    printf("%d", p[0]);//結(jié)果1      *(p+0)
    return 0;
}//a[0]表示第一行,然后沒(méi)有&,也沒(méi)有sizeof,所以是首元素,加起來(lái)就是a[0]這一行的首元素

int main()
{int a[5][5];
    int(*p)[4];
    p = a;//int (*)[5]
    printf("%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);
    //?

    return 0;
}
int main()
{int a[5][5];
    int(*p)[4];
    p = a;//int (*)[5]
    printf("%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);
    //&p[4][2] 可以理解為 (*(p+4)+2)  解引用相當(dāng)于從當(dāng)前位置訪問(wèn)一個(gè)數(shù)組  剛好int四個(gè) 然后加2

    return 0;
}

**結(jié)果FFFFFFFC,4 **

C是12

//&p[4][2] 可以理解為 (*(p+4)+2) 解引用相當(dāng)于從當(dāng)前位置訪問(wèn)一個(gè)數(shù)組p[4] 剛好int四個(gè) 然后加2
在這里插入圖片描述
指針-指針 得到指針見(jiàn)的元素個(gè)數(shù)
在這里插入圖片描述
因?yàn)榈刂酚傻偷礁咦兓〉刂窚p去大地址所以是-4

-4以%d打印就是-4 認(rèn)為內(nèi)存里放的有符號(hào)整數(shù) 以%p打印認(rèn)為內(nèi)存里是個(gè)地址 所以將地址補(bǔ)碼直接拿出來(lái) 因?yàn)?p所以以16進(jìn)制書(shū)寫(xiě) 4個(gè)1是一個(gè)f如下
- 4 寫(xiě)到內(nèi)存就是
10000000000000000000000000000000100
111111111111111111111111111111111111011
111111111111111111111111111111111111100


int main()
{int aa[2][5] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int* ptr1 = (int*)(&aa + 1);
    int* ptr2 = (int*)(*(aa + 1));
    printf("%d,%d", *(ptr1 - 1), *(ptr2 - 1));
    return 0;
}
int main()
{int aa[2][5] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int* ptr1 = (int*)(&aa + 1);//10   賦給ptr1的時(shí)候他就是個(gè)整形了  下面的-1是減去一個(gè)整形  所以打印10
    int* ptr2 = (int*)(*(aa + 1));//5  對(duì)第二行解引用拿到第二行  拿到第二行相當(dāng)于拿到數(shù)組名??梢詫?xiě)成aa[1]  他就是6的地址 本身是個(gè)整形在解引用整形無(wú)意義
    printf("%d,%d", *(ptr1 - 1), *(ptr2 - 1));
    return 0;
}

#includeint main()
{char* a[] = {"work","at","alibaba" };
	char** pa = a;
	pa++;
	printf("%s\n", *pa);
	return 0;
}

在這里插入圖片描述

int main()
{char* a[] = {"work","at","alibaba" };//數(shù)組名表示首元素地址  首元素地址表示char*   
	char** pa = a;//相當(dāng)于pa指向第一個(gè)的char*
	pa++;//指向“at”的char*   pa指向數(shù)組,+1指向下一個(gè)元素
	printf("%s\n", *pa);//解引用at  從這里向后打印字符串
	return 0;
}//at

int main()
{char* c[] = {"ENTER","NEW","POINT","FIRST" };
	char** cp[] = {c + 3,c + 2,c + 1,c };
	char*** cpp = cp;

	printf("%s\n", **++cpp);
	printf("%s\n", *-- * ++cpp + 3);
	printf("%s\n", *cpp[-2] + 3);
	printf("%s\n", cpp[-1][-1] + 1);
	return 0;
}

在這里插入圖片描述

在這里插入圖片描述

第一次解引用拿到c+2 第二次拿到了 char*內(nèi)容 所以打印 POINT

在這里插入圖片描述

printf("%s\n", *-- * ++cpp + 3);//++優(yōu)先級(jí)高   --就是對(duì)c+1  減去1 后變成c 如果是c 指向位置也會(huì)發(fā)生改變 再解引用拿到 ENTER 加3 指向T。從E向后打印打印結(jié)果ER

*cpp[-2]可以寫(xiě)成 **(cpp-2) +3指向R打印ST
在這里插入圖片描述

printf("%s\n", cpp[-1][-1] + 1);//cpp[-1][-1] 可以寫(xiě)成 (*(*(cpp-1)-1)+1   結(jié)果EW

在這里插入圖片描述

總體打印結(jié)果POINT ER ST EW

你是否還在尋找穩(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)查看詳情吧


當(dāng)前標(biāo)題:C語(yǔ)言指針進(jìn)階學(xué)完指針必看練習(xí)題詳解-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://weahome.cn/article/ihijh.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部