c語言變量為什么要定義,C語言為什么要規定對所用到的變量要“先定義,后使用”...

該樓層疑似違規已被系統折疊?隱藏此樓查看此樓

int a=10;

以上一句話對變量a進行了聲明,定義以及初始化

extern int a;

以上一句話僅僅對變量a進行了聲明,將a的鏈接屬性設置為external

int *p;

以上定義了一個指針

int a=10;

int *p;

p=&a;

以上為指針變量進行了賦值

說明:

首先*操作符被稱為“間接訪問操作符”也叫“解引用操作符”,他的作用很簡單,就是對它的右操作數進行解引用,這么說吧,間接訪問操作符的右操作數是一個地址,不過這里的地址只是相當于一個字符串,并沒有真正的在計算機內存中標識一個位置,只有對這個操作數進行解引用,才能真正定位到計算機的內存中相應的地址上;接下來是&操作符,這個被稱作“取地址操作符”,首先要明確,指針變量中存儲的不是一個具體的數值,他存儲的是一個地址“字符串”,p=&a,是將a的地址放入到p這個指針變量中,補充一句,在C語言中指針變量一般占有4個字節的內存

int *p=12;

以上表達式是錯誤的,千萬不要在實際編程中進行使用,可能有些編譯器不會報錯,但不代表所有編譯器不報錯,但即使不報錯也不要這么使用

說明:

首先該表達式給絕大多數初學者的印象是給指針p所指向的內存位置賦上值12,但是我們要注意了這里僅僅是對指針變量進行了聲明以及定義,也就是說編譯器僅僅在內存中替指針變量p分配了4個字節的內存,而并沒有位指針變量p所指向的位置分配內存,也就是說int *p=12這個表達式的意義是未明確的,因為12這個值得具體存放位置編譯器并不知道,筆者檢測過,在MinGW(gcc在windows下的移植工具集)中,這樣寫僅僅是報“警告”,但這樣寫是錯誤的,所以絕對不要這么寫

int a=12;

int (int *)1000=&a;

以上是為常量指針進行初始化,但是在C編程中我們可以說是絕無可能遇到這種情況,因為C語言中內存的分配并不是固定的

int a=100;

int *p=&a;

*++p;

看到以上表達式很多初學者就要困惑了,因為前綴自增操作符的優先級要高于間接訪問操作符的優先級,那對于*++p;這個表達式而言是不是就應該后執行間接訪問操作符呢?這里筆者糾正一下,如果是兩個操作符同時具有相應的操作數,那么就遵循操作符的優先級來進行運算,但是這里的*++p;這樣的表達式,我們看到只有一個操作數,而間接訪問操作符和前綴自增操作符都是自右右左的結合性,所以這里先執行自增操作,也就是將指針變量p所存儲的地址加1,之后再進行解引用,定位到具體的內存中,這里假設自增前p的地址是201,那么自增后再解引用,就會定位到202這個內存上

int a=100;

int *p=&a;

*p++;

看了上面的解說后,一般的初學者看了*p++;這樣的表達式,大概會興奮的說,這里必然是后綴自增先執行,哈哈哈,筆者在這里要大笑三聲然后自罰三杯,因為筆者以上并沒有說清自增的特性,現在這里說說后綴自增吧,在*p++;中后綴自增操作符會優先產生p的一個副本,然后解引用操作符會作用到這個副本上并返回值,這之后自增運算符才會在原有的p上執行加1的操作;我們再來說一說*++p;這個表達式,首先前綴自增會優先在p上執行加1的操作,然后產生一個p的副本,最后解引用操作符會對增1過后的副本進行解引用,從而得到相應位置的值

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257362.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257362.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257362.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iOS 開發--github的demo

令人驚訝的是,YYText 雖然代碼量很大(超過一萬行),但它只是 ibireme 的作品之一。ibireme 利用業余時間完成了 YYKit 工具庫,包括: YYModel — 高性能的 iOS JSON 模型框架。 YYCache — 高性能的 iOS 緩存…

RabbitMQ快速安裝配置指南

RabbitMQ快速安裝配置指南 官網的安裝教程由于需要解釋原理很多廢話,這里總結一下在CentOS7環境下的安裝配置過程。如需理解原理,請看官網原文的安裝指南或翻譯1. 安裝RabbitMQ server ## 安裝epel源 yum install -y epel-release## 安裝Erlang yum inst…

[轉]基于Starling移動項目開發準備工作

最近自己趁業余時間做的flash小游戲已經開發得差不多了,準備再完善下ui及數值后,投放到國外flash游戲站。期間也萌生想法,想把游戲拓展到手機平臺。這兩天嘗試了下,除去要接入ane接口的工作,小游戲本身不用做任何改動就…

c語言float輸出分數,c語言同一題目求解結果用float和int輸出值差1.

c語言同一題目求解結果用float和int輸出值差1.答案:3 信息版本:手機版解決時間 2018-12-08 22:35已解決2018-12-08 05:38c語言同一題目求解結果用float和int輸出值差1.最佳答案2018-12-08 06:01試試這樣就好了#include main(){long i;float j,j1,j2,j4,j6,j10;j110…

《構建之法》閱讀筆記02

今天我閱讀了《構建之法》4-6章。有許多的感悟。 以前編程序總喜歡亂命名變量,覺得自己看的懂就行了。但讀完構建之法第四章。我知道了程序是給別人看的,然后那只是程序比較簡單而已。如果一個程序過于龐大,而變量的命名有沒有實際的意義&…

2017-10-03 前端日報

2017-10-03 前端日報 精選 你需要知道的幾類npm依賴包管理看Zepto如何實現增刪改查DOM把cookie聊清楚6 Pro Tips from React DevelopersMulti-user experiences with A-Frameclintonwoo/hackernews-react-graphql: Hacker News clone rewritten with universal JavaScript, usi…

【樸靈評注】JavaScript 運行機制詳解:再談Event Loop

PS: 我先旁觀下大師們的討論,得多看書了~別人說的:“看了一下不覺得評注對到哪里去,只有吹毛求疵之感。 比如同步異步介紹,本來就無大錯;比如node圖里面的OS operation,推敲一下就可以猜到那是指同步操作&a…

c語言 strcpy原型,淺談C語言中strcpy,strcmp,strlen,strcat函數原型

實例如下://strcat(dest,src)把src所指字符串添加到dest結尾處(覆蓋dest結尾處的\0)并添加\0char *strcat(char * strDest, const char *strSrc){char *resstrDest;assert((strDest!NULL)&&(strSrc!NULL));while(*strDest)strDest;while(*strDest*strSrc){s…

angular——更多按鈕的上拉菜單(路由跳轉)

<button class"btn gray_text_btn list_item" ng-click"action.toMoreOptions()"><i class"icon ion-navicon"></i> </button> <!-------------------- 底部按鈕 -----------------------><section class&qu…

Python版——博客網站四 編寫日志創建頁

2019獨角獸企業重金招聘Python工程師標準>>> 開源地址&#xff1a;https://github.com/leebingbin/Python3.WebAPP.Blog 單從編碼來說&#xff0c;WebApp開發真正困難的地方在于編寫前端頁面。前端頁面需要混合HTML、CSS和JavaScript&#xff0c;如果對這三者沒有深…

c語言0-1勻分布隨機數,C++ generate_canonical均勻分布隨機數函數用法詳解

標準均勻分布是一個在范圍 [0&#xff0c;1) 內的連續分布。generate_canonical() 函數模板會提供一個浮點值范圍在 [0&#xff0c;1) 內&#xff0c;且有給定的隨機比特數的標準均勻分布。它有 3 個模板參數&#xff1a;浮點類型、尾數的隨機比特的個數&#xff0c;以及使用的…

第三十四天 how can I 堅持

“不要把所有的雞蛋放在同一個籃子里”是錯誤的&#xff0c;投資應該像馬克吐溫說的那樣&#xff0c;要把所有的雞蛋放在同一籃子里&#xff0c;并小心的看好他。---巴菲特。 那盆花還沒死&#xff0c;但是我又能做什么呢&#xff1f;技術。永遠的技術。睡覺。轉載于:https://w…

01-Swift 介紹

簡介 Swift 語言由蘋果公司在 2014 年推出&#xff0c;用來撰寫 OS X 和 iOS 應用程序2014 年&#xff0c;在 Apple WWDC 發布 幾家歡喜,幾家愁愁者:只學Object-C的人歡喜者:之前做過java/python/js語言的人歷史 2010 年 7 月&#xff0c;蘋果開發者工具部門總監 Chris Lattner…

2017—2018 實驗報告:實驗一

實驗一&#xff1a;實驗報告 課程&#xff1a;程序設計與數據結構 班級&#xff1a; 1623 姓名&#xff1a; 張旭升 學號&#xff1a;20162329 指導教師&#xff1a;婁嘉鵬 王志強 實驗日期&#xff1a;9月25日 實驗密級&#xff1a; 非密級 預習程度&#xff1a; 已預習 必修/…

病床呼叫系統有顯示屏c語言,病床呼叫系統畢業設計

內容介紹完整版大學病床呼叫系統畢業設計&#xff0c;已修改完格式摘 要醫院已經從人工管理模式向智能化方向發展。“病床呼叫系統”可以實現對病房的智能化管理&#xff0c;可實現呼叫、求救警報、信息存儲、顯示等等功能。患者在住院期間&#xff0c;可能會在任意時間請求醫…

1. mybatis批量插入數據

通過list <insert id"saveByList" useGeneratedKeys"true" parameterType"java.util.List"> insert into T_App_Default_User(UserID,AppType,CreateTime)values <foreach collection"list" item"item" index&quo…

iOS開發 - Swift實現清除緩存功能

前言: 開發移動應用時&#xff0c;請求網絡資源是再常見不過的功能。如果每次都去請求&#xff0c;不但浪費時間&#xff0c;用戶體驗也會變差&#xff0c;所以移動應用都會做離線緩存處理&#xff0c;其中已圖片緩存最為常見。 但是時間長了&#xff0c;離線緩存會占用大量的…

c語言結構體單元測試,C語言結構體單元練習.doc

C語言結構體單元練習1.有以下定義和語句&#xff1a;struct student{ int age;int num; };struct student stu[3]{{1001,20},{1002,19},{1003,21}};main(){ struct student *p;pstu;…… }則以下不正確的引用是 。A) (p)->num B) p C) (*p).num D) p&stu.age2.有以下結構…

如何開啟IIS7以上的“IIS6管理兼容性”

護衛神PHP套件的安裝&#xff0c;需要開啟“IIS6管理兼容性”&#xff0c; 那么&#xff0c;如何開啟IIS7、IIS7.5、IIS8.0的IIS6兼容模式呢&#xff1f; 設置的時候&#xff0c;請參照如下截圖&#xff1a; 本文轉自黃聰博客園博客&#xff0c;原文鏈接&#xff1a;http://www…

pop to 特定的UIViewController

1. 我們可以推出到特定的UIViewController 2. 有一個類沒有navigationController&#xff0c;以前一般用delegate&#xff0c;我覺得我們可以把引用一個navigationController&#xff0c;然后使用它來推出另一個UIViewController轉載于:https://www.cnblogs.com/studyNT/p/4486…