久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

指針用法

 王子hgyufaq6hk 2019-11-15

主要內(nèi)容有:指針的定義,訪問,,操作,,指針地址作為返回值,指針和引用的區(qū)別,,指針和數(shù)組區(qū)別

<1>指針的定義:

一級指針定義:
int* p=NULL;

int* p=new int;

二級指針:

int **p=NULL;

int** p=new int*[10];初始化時只有最高位可先不定義

當(dāng)使用const限制時,,有以下幾種情況:

const char* p,char const *p,char *const p,const char* const p,,有何區(qū)別,?

1)當(dāng)const 在*前面,相當(dāng)于const修飾的是*p,即指針內(nèi)容:如const char* p,  char const *p  則限制指針指向地址的內(nèi)容不可修改

const char* p=new char('a'),則操作*p='b'會出錯,,不可修改指針內(nèi)容

2)當(dāng)const在*后面,,char *const p;時,相當(dāng)于const修飾的是p,即指針地址,,不可修改指針的地址

char* const p=new char('a'),則p=new char('b')出錯

3)兩者一起則指針的內(nèi)容和地址均不可改


<2>指針的訪問:*(p+i),   p[i],;

<3>指針的操作:
char* s='AAA';

cout<<s<<endl;

s[0]='B';

cout<<s<<endl;


1)指針變量所占內(nèi)存大小和指針加減有關(guān)的問題
指針變量所占內(nèi)存大小:32位操作系統(tǒng)是32位(4字節(jié)),,64位操作系統(tǒng)是64位(8字節(jié)),;


指針變量自增自減:自增自減中指針變量值的改變大小等于所指向的對象類型的內(nèi)存大小。如:char* pt1,,那么pt1++就是加1,,若為int* pt2,那么pt2++就是增加4,。

指針運算問題都是以相應(yīng)變量的類型大小作為基本單位的,,例如int p[4]={0,0,0,0},p+1就是指p的地址基礎(chǔ)上偏移4字節(jié),。同理,,&p[0]+1也是一樣的。除非(char*)&p[0]+1才是偏移一個字節(jié),,因為地址被強制轉(zhuǎn)化為char*了,。
補充:
指針?biāo)赶虻膶ο箢愋团袛喾椒āサ糁羔樏昂退懊娴?,剩下的就是指針類型,。

上面所說的地址地址++或--都是對于偏移地址offset而言的,。

*p++,(*p)++,*++p,++*p有什么不同:

*和++優(yōu)先級一樣,采用右結(jié)合規(guī)則:

*p++,:即*(p++)結(jié)果相當(dāng)于*p,因為p++返回值為p

(*p)++:先取p所指向的值,,將值加1

*++p:即*(++p),結(jié)果為p下一位的值,,因為++p返回值為p+1;

++*p即++(*p),結(jié)果為p的值加一

指針與sizeof()(32位系統(tǒng)):以下sizeof(p)的結(jié)果為
char* p='abc'     指針大小:4
char p[] ='abc'   字符串長度,,要加上字符串結(jié)束符\0:4
int* p=new int[10];      指針大?。?
int (*p)[10];       雖然指向數(shù)組,,但還是指針:4
int* p[10];        指針數(shù)組,本質(zhì)是數(shù)組,,數(shù)組的每個元素是整形指針:40
char  p[10] ='abc':  10

〈5〉指針和引用的區(qū)別:
定義引用必須指明引用對象,,指針則不用;
引用一旦生明則不可以修改引用對象,,指針則可以修改指針的指向
引用傳參不需要復(fù)制實參,,指針傳參需要復(fù)制實參地址
 

<6>指針地址作為返回值:

當(dāng)指針指向全局存儲區(qū)時,此時指針的地址作為返回值是有效的的,,其他情況則無效,。

因為函數(shù)結(jié)束是局部變量空間會被回收,全局存儲區(qū)則不會

如:char* p='asda' 有效,,char s[]='asda' 返回則無效

<7>指針和數(shù)組區(qū)別:

1)當(dāng)數(shù)組作為函數(shù)參數(shù)時會退化為指針,,即此時數(shù)組與指針操作是等價的,如:

void test(char s[],int len)
{
    for (int i = 0;i < len;i++)
        cout << *s++ << ' ';
}

2)其他情況,,數(shù)組名可以看成一個常量指針,,指向數(shù)組首元素,此時的數(shù)組名不可以進行++,--操作,,不可被復(fù)制,,即不可修改

注意:int a[10],a指向數(shù)組首地址,&a是數(shù)組地址,,即&a+1,相當(dāng)于移動40個字節(jié),,此時指針指向數(shù)組尾部。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多