亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

講解C語言編程中指針賦值的入門實例

2020-05-23 14:11:55
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了講解C語言編程中指針賦值的入門實例,通過const int i與int *const pi這樣兩個例子來分析指針的賦值和地址指向,需要的朋友可以參考下
 

從const int i 說起

你知道我們聲明一個變量時象這樣int i ;這個i是可能在它處重新變賦值的。如下:

int i = 0;/* . . . */i = 20; /*這里重新賦值了*/

不過有一天我的程序可能需要這樣一個變量(暫且稱它變量),在聲明時就賦一個初始值。之后我的程序在其它任何處都不會再去重新對它賦值。那我又應該怎么辦呢?用const 。

/* . . . */const int ic =20;/* . . . */ic = 40; /*這樣是不可以的,編譯時是無法通過,因為我們不能對const 修飾的ic重新賦值的。*//*這樣我們的程序就會更早更容易發現問題了。*//* . . . */

有了const修飾的ic 我們不稱它為變量,而稱符號常量,代表著20這個數。這就是const 的作用。ic是不能在它處重新賦新值了。

認識了const 作用之后,另外,我們還要知道格式的寫法。有兩種:

const int ic = 20;

int const ic = 20;

它們是完全相同的。這一點我們是要清楚??傊瑒毡匾涀onst 與int哪個寫前都不影響語義。有了這個概念后,我們來看這兩個家伙:

const int *pi

int const *pi

按普通的邏輯看,它們的語義有不同嗎?呵呵,只要記住一點:int 與const 哪個放前哪個放后都是一樣的,就好比const int ic;與int const ic;一樣。也就是說,它們是相同的。

好了,我們現在已經搞定一個“雙包胎”的問題。那么

int *const pi;

與前兩個語句又有什么不同呢?下面就來具體分析它們的格式與語義吧。
先來說說const int *pi是什么作用 (當然int const *pi也是一樣的,前面我們說過,它們實際是一樣的)??聪旅娴睦樱?/p>

#include "stdio.h"main(){  /* 代碼開始 */  int i1 = 30;  int i2 = 40;  /* 現在 pi 變量的內容為 i1 的內存地址 */  const int *pi = &i1;  /* 注意這里,pi可以在任意時候重新賦值一個新內存地址*/  /* pi 變量的內容為 i2 的內存地址 */  pi = &i2;  /* 想想看:這里能用*pi = 80來代替嗎?當然不能!*/  i2 = 80;  printf("%d/n", *pi); /* 輸出是80 */  /* 代碼結束 */}

語義分析:

看出來了沒有,pi的值是可以被修改的。即它可以重新指向另一個地址的,但是,不能通過*pi來修改i2的值。這個規則符合我們前面所講的邏輯嗎?當然符合了。

首先const 修飾的是整個*pi(注意,我寫的是*pi而不是pi)。所以*pi是常量,是不能被賦值的(雖然pi所指的i2是變量,不是常量)。

其次,pi前并沒有用const 修飾,所以pi是指針變量,能被賦值重新指向另一內存地址的。你可能會疑問:那我又如何用const 來修飾pi呢?其實,你注意到int *const pi中 const 的位置就大概可以明白了。請記住,通過格式看語義。哈哈,你可能已經看出了規律吧?那下面的一節也就沒必要看下去了。不過我還得繼續我的戰斗。

再看int *const pi

確實,int *const pi與前面的int const *pi會很容易給混淆的。注意:前面一句的const 是寫在pi前和*號后的,而不是寫在*pi前的。很顯然,它是修飾限定pi的。我先讓你看例子:

#include "stdio.h"main(){  /* 代碼開始 */  int i1 = 30;  int i2 = 40;  int *const pi = &i1;  /* pi = &i2; 注意這里,pi不能再這樣重新賦值了,即不能再指向另一個新地址。*/  /* 所以我已經注釋了它。*/  i1 = 80; /* 想想看:這里能用 *pi = 80; 來代替嗎?可以,這里可以通過*pi修改i1的值。(第5行的注釋)*/  /* 請自行與前面一個例子比較。 */  printf("%d", *pi); /* 輸出是80 */  /* 代碼結束 */}

語義分析:

看了這段代碼,你明白了什么?有沒有發現pi值是不能重新賦值修改了。它只能永遠指向初始化時的內存地址了。相反,這次你可以通過*pi來修改i1的值了。與前一個例子對照一下吧,看以下的兩點分析:

pi因為有了const 的修飾,所以只是一個指針常量:也就是說pi值是不可修改的(即pi不可以重新指向i2這個變量了)(請看第4行的注釋)。
整個*pi的前面沒有const 的修飾。也就是說,*pi是變量而不是常量,所以我們可以通過*pi來修改它所指內存i1的值(請看第5行的注釋)。
總之一句話,這次的pi是一個指向int變量類型數據的指針常量。

我最后總結兩句:

如果const 修飾在*pi前,則不能改的是*pi(即不能類似這樣:*pi=50;賦值)而不是指pi。
如果const 是直接寫在pi前,則pi不能改(即不能類似這樣:pi=&i;賦值)。
請你務必先記住這兩點,相信你一定不會再被它們給搞糊了?,F在再看這兩個聲明語句int const *pi和int *const pi時,呵呵,你會頭昏腦脹還是很輕松愜意?它們各自聲明的pi分別能修改什么,不能修改什么?再思考下這些問題。

補充三種情況

這里,我再補充以下三種情況。其實只要上面的語義搞清楚了,這三種情況也就已經被包含了。不過作為三種具體的形式,我還是簡單提一下吧。

情況一:int *pi指針指向const int i常量的情況

#include "stdio.h"main(){  /* begin */  const int i1 = 40;  int *pi;  pi = &i1; /* 這樣可以嗎?不行,VC下是編譯錯。*/  /* const int 類型的i1的地址是不能賦值給指向int 類型地址的指針pi的。否則pi豈不是能修改i1的值了嗎!*/  pi = (int *) &i1; /* 這樣可以嗎?強制類型轉換可是C所支持的。*/  /* VC下編譯通過,但是仍不能通過 *pi = 80來修改i1的值。去試試吧!看看具體的怎樣。*/  /* end */}

情況二:const int *pi指針指向const int i1的情況

#include "stdio.h"main(){  /* begin */  const int i1=40;  const int * pi;  pi=&i1;/* 兩個類型相同,可以這樣賦值。很顯然,i1的值無論是通過pi還是i1都不能修改的。 */  /* end */}

情況三:用const int *const pi聲明的指針

#include "stdio.h"main(){  /* begin */  int i;  const int * const pi=&i; /*你能想象pi能夠作什么操作嗎?pi值不能改,也不能通過pi修改i的值。因為不管是*pi還是pi都是const的。 */  /* end */}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕综合一区| 亚洲品质视频自拍网| 日韩中文字幕视频| 国产精品一区二区久久国产| 国产欧美一区二区三区久久人妖| 欧美孕妇孕交黑巨大网站| 91高清免费视频| 亚洲图片欧美日产| 亚洲激情电影中文字幕| 亚洲精品国产欧美| 日韩在线免费av| 国产亚洲精品综合一区91| 久久久成人精品视频| 精品动漫一区二区三区| 成人欧美一区二区三区黑人| 神马久久久久久| 国产精品影片在线观看| 日韩在线观看免费高清完整版| 久久久91精品国产一区不卡| 亚洲在线免费观看| 日韩国产激情在线| 秋霞午夜一区二区| 蜜臀久久99精品久久久久久宅男| 亚洲最大的免费| 91免费欧美精品| 日韩欧美中文字幕在线播放| 欧美激情久久久| 日韩电影中文字幕在线观看| 日韩亚洲精品电影| 亚洲精品女av网站| 色综合天天综合网国产成人网| 欧美日韩在线看| 精品久久中文字幕久久av| 国产偷国产偷亚洲清高网站| 亚洲精品国产精品久久清纯直播| 国产欧美一区二区白浆黑人| 久久免费观看视频| 性金发美女69hd大尺寸| 青青草原一区二区| 色妞在线综合亚洲欧美| 欧美亚洲另类在线| 一区二区三区视频免费在线观看| 中日韩午夜理伦电影免费| 欧美日韩国产一区在线| 国产精品日本精品| 91亚洲国产成人精品性色| 亚洲天堂开心观看| 日本久久久久久久| 日韩亚洲精品视频| 亚洲人成在线播放| 欧美精品videofree1080p| 亚洲japanese制服美女| 91精品视频大全| 日韩女优在线播放| 亚洲欧美一区二区三区情侣bbw| 丝袜美腿精品国产二区| 色诱女教师一区二区三区| 欧美高清视频一区二区| 亚洲女人被黑人巨大进入| 欧美午夜宅男影院在线观看| 日韩在线不卡视频| 日本91av在线播放| 国产剧情久久久久久| 日韩少妇与小伙激情| 欧美激情女人20p| 国产成人在线播放| 亚洲偷熟乱区亚洲香蕉av| 奇米4444一区二区三区| 成人免费xxxxx在线观看| 国产成人精品a视频一区www| 高跟丝袜一区二区三区| 日韩精品极品在线观看| 亚洲综合色激情五月| 一个人看的www欧美| 国内揄拍国内精品少妇国语| 久国内精品在线| 国产中文字幕亚洲| 国产97色在线|日韩| 国产精品久久久精品| 欧美精品一二区| 丝袜亚洲欧美日韩综合| 亚洲四色影视在线观看| 久久久国产一区二区| 中国china体内裑精亚洲片| 亚洲国产成人精品女人久久久| 亚洲欧美综合区自拍另类| 欧美亚洲第一区| 久久久免费高清电视剧观看| 久久久最新网址| 国产精品成久久久久三级| 色偷偷噜噜噜亚洲男人| 97超碰国产精品女人人人爽| 欧美日韩视频免费播放| 97精品国产97久久久久久免费| 国产婷婷色综合av蜜臀av| 国产精品久久久久影院日本| 亚洲图片欧美午夜| 国产网站欧美日韩免费精品在线观看| 精品人伦一区二区三区蜜桃网站| 欧美精品福利在线| 国产伦精品免费视频| 久久综合久久美利坚合众国| 国产成人avxxxxx在线看| 奇门遁甲1982国语版免费观看高清| 国产不卡精品视男人的天堂| 亚洲视频在线免费看| 日韩av日韩在线观看| 在线精品视频视频中文字幕| 精品国产一区二区在线| 色综合视频网站| 中文字幕精品视频| 成人精品在线观看| 国产999在线观看| 欧美超级乱淫片喷水| 一本色道久久综合狠狠躁篇怎么玩| 亚洲欧美日韩天堂| 欧美另类精品xxxx孕妇| 成人中文字幕+乱码+中文字幕| 久久精品99无色码中文字幕| 亚洲欧美精品一区| 国产99久久精品一区二区| 午夜精品一区二区三区在线| www.亚洲一二| 欧美激情图片区| 国产91色在线|免| 久久久极品av| 韩日精品中文字幕| 成人深夜直播免费观看| 欧美裸体视频网站| 夜夜狂射影院欧美极品| 国产精品三级美女白浆呻吟| 欧美xxxx综合视频| 欧美俄罗斯乱妇| 色偷偷av亚洲男人的天堂| 国产经典一区二区| 亚洲电影在线观看| 中文字幕自拍vr一区二区三区| 久热精品在线视频| 久久亚洲国产精品| 中文字幕不卡在线视频极品| 亚洲精品乱码久久久久久按摩观| 久久手机免费视频| 成人精品久久一区二区三区| 人妖精品videosex性欧美| 国内精品久久久久久久久| 91av在线免费观看| 国产欧美日韩专区发布| 精品国产乱码久久久久久婷婷| 国产suv精品一区二区三区88区| 欧美激情在线狂野欧美精品| 欧美日韩亚洲精品内裤| 亚洲福利视频二区| 26uuu另类亚洲欧美日本老年| 久久精品一本久久99精品| 精品久久久久久国产| 欧美日韩国产成人在线观看| 欧美成年人在线观看| 色偷偷偷亚洲综合网另类| 国产精品日韩在线一区| 在线视频日本亚洲性| 日韩高清a**址| 欧美一级片久久久久久久| 亚洲 日韩 国产第一| 欧美丰满老妇厨房牲生活|