久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

C語言指針-創(chuàng)新互聯(lián)

https://blog.csdn.net/constantin_/article/details/79575638

創(chuàng)新互聯(lián)公司主要從事成都做網(wǎng)站、成都網(wǎng)站制作、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務郁南,十多年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:028-86922220

就上面的博客作一下筆記:

關于【int (*p)[3]】與【int *p[3]】兩個的區(qū)別

https://blog.csdn.net/sayesan/article/details/39001609

https://blog.csdn.net/ywb201314/article/details/52062059

技巧1:注意*與[與變量結合的優(yōu)先順序,p有可能是指針,也有可能是數(shù)組,也有可能是函數(shù)名。

技巧2:關于“指針類型”的判定:

1)首先,要確保變量就是一個指針類型。

2)去掉變量名,剩下的就是指針類型。

技巧3:關于“指針所指向的類型”的判定:

1)首先,要確保變量就是一個指針類型。

2)去掉變量名指針的聲明符*,剩下的就是指針指向的類型。

void如果來修飾指針運算符*,就代表是任意類型的指針。

int (*p)[3];

關于復雜指針類型,上面這個類型。注意(*p)這個括號,僅僅是用來約束運算符優(yōu)先級的。不要和下面的指針類型混淆。

Int (*p)(int);

上面這個類型。注意(*p)這個括號,代表p指向的是一個函數(shù)。

所以在判斷(*p)指針的指向的內(nèi)容類型時,可以將(*p)同時去掉再行判斷 。

指針打?。翰捎?p

1)對于“例二”

?如果ptr指針類型聲明為char *,ptr++之后的打印結果為b。

????#include?"stdafx.h"????
????#include?<stdlib.h>?
????
????int?_tmain(int?argc,?_TCHAR*?argv[])
????{
????	char?a[20]={'a','b','c','d','e','f'};??
????????char?*ptr=?a;?//強制類型轉換并不會改變a?的類型??
????????ptr++;?
????		
????	printf("%c",*ptr);
????	system("pause");
????	return?0;
????}

?如果ptr指針類型聲明為int *,ptr++之后的打印結果為e。?

????#include?"stdafx.h"
????#include?<stdlib.h>?
????
????int?_tmain(int?argc,?_TCHAR*?argv[])
????{
????	char?a[20]={'a','b','c','d','e','f'};??
????????int?*ptr=(int?*)a;?//強制類型轉換并不會改變a?的類型??
????????ptr++;?
????
????	printf("%c",*ptr);
????	system("pause");
????	return?0;
????}

? 所以當指針聲明成不同的類型,++的效果是不一樣的。++和指針的類型有關。

? 如果指針類型和指針所指向的類型不一致時,要注意++的使用。

2)對于“例三”

????#include?"stdafx.h"????
????#include?<stdlib.h>?
????
????int?_tmain(int?argc,?_TCHAR*?argv[])
????{
????	?int?array[20]={0};??
????????int?*ptr=array;??
????
????
????????for(int?i=0;i<20;i++)??
????????{??
????????????(*ptr)++;??
????????????ptr++;
????????}??
????
????	?for(int?i=0;i<20;i++)??
????????{??
??????????printf("[%d]?=?%d\n",i,array[i]);
????????}?
????		
????	
????	system("pause");
????	return?0;
????}

3)對于“例四”

#include?"stdafx.h"
#include?<stdlib.h>?

int?_tmain(int?argc,?_TCHAR*?argv[])
{
	
char?a[20]="You_are_a_girl";??
int?*ptr=(int?*)a;??
ptr+=1;
????printf("%d\n",*ptr);?
	system("pause");
	return?0;
}

對行%d,*ptr輸出的是1600483937

對行%c,*ptr輸出的是a

這是為什么,請高手解答?

4)對于“例五”

????#include?"stdafx.h"????
????#include?<stdlib.h>?
????
????int?_tmain(int?argc,?_TCHAR*?argv[])
????{
????	????char?a[20]="You_are_a_girl";??
????????????char?*p=a;??
????????????char?**ptr=&p;??
????????????//printf("p=%d\n",p);??
????????????//printf("ptr=%d\n",ptr);??
????????????//printf("*ptr=%d\n",*ptr);??
????????????printf("**ptr=%c\n",**ptr);??
????????????ptr++;??
????????????//printf("ptr=%d\n",ptr);??
????????????//printf("*ptr=%d\n",*ptr);??
????????????printf("**ptr=%c\n",**ptr);?
????	system("pause");
????	return?0;
????}

? ?這個例子有點繞,需要注意,上面我來配個圖

C語言指針

? ?**ptr:分解開就是*(*ptr)

*ptr取指ptr所指向的內(nèi)容,ptr指向的地址是指針變量p所占用的內(nèi)存地址,ptr所指向的內(nèi)容就是指針p變量。

*(*ptr) 就是*p,也就是取p所指向的a的首地址的值,所以第一次打印ptr的值是Y。

?

ptr++,就是得明白指針的++與普通的運算符是不一樣的(指針變量的++,代表它所指向的個體的內(nèi)存地址的遞增,且增長單位為指針類型所占字節(jié)個數(shù))。

ptr++,也就是?ptr所指向的地址+4(注意是p的地址+4,并非a的地址+4).

? ? ? ? ? ? ptr++ ,? 就是ptr所指向的內(nèi)存地址是指針p的內(nèi)存地址加4個字節(jié)的地址,至于這個地址里存儲的對象是啥,誰也不知道。

*ptr,ptr新指向內(nèi)存地址就是下面的這個藍牙框。 *(*ptr),就是把*ptr當作是一個指針,而*ptr并非一定是一個指針。這樣程序可能就會報錯。

C語言指針

5)對于“例9”

假如我像下面這么寫,會報一個錯誤:

????#include?"stdafx.h"????
????#include?<stdlib.h>?
????
????int?_tmain(int?argc,?_TCHAR*?argv[])
????{
????int?array[10]={0,1,2,3,4,5,6,7,8,9},value;??
????array++;
????value=*array;?
????
????????printf("%d\n",value);?
????	system("pause");
????	return?0;
????}

?error C2105: “++”需要左值

上面的錯誤百度了一個解釋:https://blog.csdn.net/hou09tian/article/details/75332576

就是數(shù)組名是一個指針,但是不是一個變量。不可能對它進行++運算。++不可使用在常量上

?改一下代碼:

????int?_tmain(int?argc,?_TCHAR*?argv[])????
????{
????int?array[10]={0,1,2,3,4,5,6,7,8,9},value;??
????int?*ptr?=?array;
????ptr++;
????value=*ptr;?
????
????????printf("%d\n",value);?
????	system("pause");
????	return?0;
????}

?結果輸出1

其實,說到數(shù)組,我還一個 需要補充的:數(shù)組元素的內(nèi)存地址是連續(xù)的

通過下面的代碼打?。?/p>

?for(int?i?=?0;?i?<?10;?i++){
????printf("array[%d]?address?=?%d\n",i,&array[i]);?
?}

?C語言指針

6)對于“例十”

strcpy函數(shù),會將char *指針所指向的字符串復制,而不僅僅是一個字符。

printf("%s",array);? ??%s是從起始位置輸出字符直到遇到\0為止,所以%s輸出char[]數(shù)組,會輸出整個串。

?

關于strcpy函數(shù)的詳解:

https://blog.csdn.net/okawari_richi/article/details/57411796

7)對于“例十一”? (數(shù)組和指針)

sizeof 函數(shù):https://blog.csdn.net/u012520854/article/details/53511154

http://blog.sina.com.cn/s/blog_4badbe8e0100qb0s.html?(詳細說明數(shù)組名與指針的關系)

8)對于“例十二”? (結構體和指針)

?https://www.cnblogs.com/winifred-tang94/p/5843440.html

成員調用的方法(->左邊必須是指針,"."左邊必須是實體)

特別注意結構體與數(shù)組,和指針的關系是不一樣的。

C語言指針????

?

?對于*(ptr +1)打印的不是結構體的第2個元素,很奇怪。難道數(shù)組名與結構體名不一樣?

?????????printf("%s\n","----------結構體名取結構體正常數(shù)據(jù)------------------");?
??????printf("%d\n",*ss);?
??????printf("%d\n",*(ss+1));

??

增加上述代碼,工程一編譯就報錯:

錯誤1error C2100: 非法的間接尋址

錯誤2error C2676: 二進制“+”: “wmain::MyStruct”不定義該運算符或到預定義運算符可接收的類型的轉換

所以我得出一個結論,數(shù)組名與結構體名有完全不一樣的特性:結構體名不能當成指針使用,結構體名不是指針常量。

注意這行代碼:

????struct?MyStruct?*ptr=&ss;

假如ss是數(shù)組,上面的代碼就不用加&號了。

????struct?MyStruct?*ptr=ss;

但是結構體會報錯:

錯誤1error C2440: “初始化”: 無法從“wmain::MyStruct”轉換為“wmain::MyStruct *”

這就更加證明了結構體名不是指針常量這個結論 。

繼續(xù)修改代碼:

C語言指針?

注意上面的打印結果,通過pstr取的結構體元素地址是正確的,但是ptr取的結構體元素地址是錯誤的。

? ? 注意代碼中ptr與pstr的定義:

??????struct?MyStruct?*ptr=&ss;??
??????int?*pstr=(int*)&ss;

? ? ptr指向的類型是 MyStruct,指向的對象為結構體實體ss。

pstr指向的類型是int,指向的對象為結構體的實體ss的首元素。

ptr+1,就是&ss這個地址+sizeof(MyStruct),就是&ss+16。

pstr+1,就是&ss這個地址+sizeof(int),就是&ss+4。

--------------------------------------------------------------------------------------------? ?

? |? ?結構體與數(shù)組的共性:

? |? ? ? ? 1)結構體實體的地址和結構體第一個元素的地址一樣,?各元素的地址也是連續(xù)的。(特殊情況也有不連續(xù)的)

|? ? ? ? ? ? ?數(shù)組實體的地址和數(shù)組第一個元素的地址一樣,?各元素的地址也是連續(xù)的。

|? ????? 2)數(shù)組和結構體自身的實體(變量)并不占據(jù)獨立的內(nèi)存(和首元素地址一樣),只有元素才占用真正的內(nèi)存地址,

|? ????????? ?它只是標明自身的元素是一組特殊的數(shù)據(jù)結構, 通過實體封裝,便于元素的訪問。

|? ?

? |? 結構體與數(shù)組的區(qū)別:

|?????? 1)數(shù)組名是指針常量,但是結構體名和指針沒有任何的關系。

--------------------------------------------------------------------------------------------? ????

9)對于“例十三”????????

? ?注意作者對結構體的特殊之處的解釋

10)指針類型的轉換

可以把指針的值當作一個整數(shù)取出來,也可以把一個整數(shù)值當作地址賦給一個指針

?

11) 指針安全問題

這個很重要

? 使用指針必須要清楚指針指向了哪里

?

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

分享題目:C語言指針-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://sd-ha.com/article4/pooie.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供自適應網(wǎng)站、ChatGPT、企業(yè)網(wǎng)站制作、網(wǎng)頁設計公司、面包屑導航、做網(wǎng)站

廣告

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

h5響應式網(wǎng)站建設