欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
字符指針的特殊之處
如果我們對一個(gè)非字符的指針進(jìn)行操作,方法是這樣的:

  定義:
    (1)int a=7; int *p=&a; 或者
    (2)int a=7; int *p; p=&a; 或者
    (3)int a=7; int *p; *p=a;

 ?。?)這樣定義的原因是因為等號兩邊的類(lèi)型必須匹配,int *p=&a; 等號左邊定義的是一個(gè)指針,指針的內容是地址,所以等號右邊也應該是地址,&a就是取空間a的地址;
    (2)int *p; p=&a; 為什么不是 *p=&a 而是 p=&a; 因為在定義的時(shí)候“*”只是說(shuō)明p是一個(gè)指針,而p也是一個(gè)變量,不過(guò)是儲存地址的一種特殊的變量,對于變量使用,我們都是直接使用它的名字,就好象,我們定義個(gè)常量 const a=7; 我們要調用它的時(shí)候直接使用a就可以了,并不需要帶上 const 修飾,這里也一樣,用指針變量時(shí)并不需要帶上“*”;
    (3)而第三種情況中的 *p=a;中的“*”和第二種里面是不同的,這里的“*”是取內容符,與之相反的是取地址符“&”,分析一下,第三種情況中,等號左邊是*p表示對指針p取內容,它的內容指向內存中的某個(gè)已經(jīng)在開(kāi)始通過(guò) int *p; 定義好的空間里(比較確切一點(diǎn)的說(shuō)法是,p在定義的時(shí)候,其內容里的地址指向內存中某個(gè)未知的空白區域,即未占用,不受保護的內存空間),這個(gè)空間里存放的數據類(lèi)型是整型,所以等號的右邊也應該是整型才能匹配,所以是 *p=a; 這里的“*”和定義時(shí)候的是不同的,這一點(diǎn)很重要。

  其實(shí)上面的都是些題外話(huà),我要說(shuō)的其實(shí)是關(guān)于指針的輸出的一些問(wèn)題。我們利用上面定義好的進(jìn)行輸出操作。

  輸出指針的內容(即所指向空間的地址):cout<<p<<endl;
  輸出指針所指的內容(即指針內容所描述地址空間中的內容):cout<<*p<<endl;

  指針對于字符的處理卻有些特殊,和前面的非字符的指針輸出處理要分開(kāi)理解。

  比如,我們定義一個(gè) char a='A'; char *p=&a;  如果我們調用上面非字符指針的輸出方式,結果如下:
  方式1 cout<<p<<endl; 結果 A####(#表示亂碼,不可識別) 并不是地址
  方式2 cout<<*p<<endl; 結果 A 這和非字符的指針情況一樣,輸出指針指向的內容
  而且我們直接操作 cout<<&a<<endl; 結果和方式1的結果是完全相同的

  為什么方式1輸出的不是地址呢?這里有一個(gè)特殊的處理,雖然這里的p的內容確確實(shí)實(shí)是一個(gè)地址,但是cout操作字符指針的話(huà),它遇到地址,就會(huì )直接去尋找這個(gè)地址所指向的內容,并把它的空間里的機器數按照字符的規則轉化成字符輸出,直到遇到“\0”這個(gè)操作符才停止。所以我們直接輸出p的時(shí)候,它先輸出‘A’然后再繼續讀取后面的內存空間知道遇到“\0”,顯示結果是“A+亂碼”。

  你肯定會(huì )說(shuō),為什么要這樣呢,這樣多不方便呀,其實(shí)這么做是有目的的,而且恰恰就是為了方便才這么設置的。因為這樣就可以很容易的處理字符串了,而處理字符串是我們在計算機中用得很多的操作。

  比如我們第一個(gè)字符串數組 char a[]="mantou"; a[]在內存中在7個(gè)字節,而不是6個(gè),因為在mantou字符串后面還隱藏有一個(gè)“\0”,這時(shí)我們用 char *p=a;?。ㄟ@里不用&a是因為,a[]是一個(gè)數組,數組名a本身就是一個(gè)指針常量) 輸出操作 cout<<p<<endl; 這里就不會(huì )輸出地址,而是直接輸出整個(gè)mantou字符串,很方便哈,如果我們 cout<<*p<<endl; 結果顯示的是m,因為p是指向數組的首元素的地址的,就是指向這里的儲存m的空間的地址,所以取p的內容(*p),只能輸出一個(gè)m哦。

  雖然通常情況下我們是不需要了解我們的數據地址的,但我也順便說(shuō)說(shuō),怎么得到字符指針的地址,也可以方便大家對內存地址的分配再做更深入的研究。

  char a='A';  如果這里直接輸出 cout<<&a<<endl; 當然是不能輸出地址的,原理上面已經(jīng)說(shuō)過(guò)了,cout遇到字符型地址就會(huì )轉換成字符串輸出。我們可以用指針p先取得a的地址(char *p=&a;),但是這樣用 cout<<p<<endl;也并不能得到地址呀,原因上面也說(shuō)過(guò)了。
    做個(gè)小技巧,首先我們知道p中的內容本身就是地址,但是因為它是字符串,我們又不能直接輸出它,所以呀,我們可以把指針里的內容(記載的是一個(gè)地址數據)強制轉化成整型再輸出 cout<<(int)p<<endl; 呵呵,這樣就得到了這個(gè)指針里的內容——十進(jìn)制型的地址,而我們知道,地址是用十六進(jìn)制表示的,形式是 0x######## 0x后面加8位十六進(jìn)制數,我們把我們先得到的十進(jìn)制地址按照地址的表示形式用流操作轉化成十六進(jìn)制就可以了。代碼如下:
cout<<endl<<"0x"
     <<setw(8)<<setiosflags(ios::right)<<setfill('0')
     <<setiosflags(ios::uppercase)<<hex<<(int)p<<endl;

注意不要忘了 #include<iomanip.h> 這個(gè)頭文件哦 
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
C/C 中字符指針數組及指向指針的指針的含義
(const) char *轉CString 詳解(字符串類(lèi)型轉換詳解,不斷補充)
C++字符串與指針
字符串文字量
csdn(18條消息) 2021版C++教程,C++進(jìn)階教程(最全C++教程)
C 指針數組和指向指針的指針
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久