什么是識別符號? 識別符號是用來標識變數、函式、類、模塊,或者任何其他用戶自定義專案的名稱,用它來命名程式正文中的一些物體,比如函式名、變數名、類名、物件名等,如:int a1=0; const b1="hello"中 a1和b1都是識別符號,不過a1是變數,也就是存盤單元的識別符號,b1是資料字串的識別符號
什么是關鍵字?關鍵字是C語言提供的有特殊含義的符號,也叫做“保留字”,C語言一共提供了32個關鍵字,這些關鍵字都被C語言賦予了特殊含義 如: while include if else define const 等等
c程式運行的實質
就是執行環境程式順序決議每個陳述句再執行的程序,決議陳述句也稱為解釋陳述句,就是按照關鍵字和識別符號代表的含義來解釋成執行動作,
如 int a1=1; a1=a1+1;這兩句:
第一句,int a1=0 :執行環境順序讀到"int "關鍵字了,就知道需要宣告4個位元組的空間,看到a1,就知道要作下記號,標記a1作為這4個位元組空間(盒子)的記號,然后給a1所代表的這個盒子賦值為0;
第二句,a1=a1+1, 先從等號右邊開始解釋,看到等號右邊的a1了,就是要讀取a1代表的盒子里面的數值,讀取就是復制,讀取后,將數值加1,然后將新數值賦值給等號左邊的a1盒子
指標變數作為用于存盤地址的變數,操作方法和上述完全一樣,
總而言之,就是:盒子(也就是變數)可以讀取、賦值,數值只能讀取,
特殊寫法的識別符號,*變數名 與 陣列名[],如陳述句 *s1= s0[0]; s0[0]與*s1都是代表變數盒子的識別符號,不要理解成為運算子,
c語言語法不嚴格使人造成的誤解:
1 char *p0;的宣告 注意 char *p0=null; 其實正確寫法應是 char* p0=null;但兩種寫法編譯都可通過,前種寫法容易使人誤解為在宣告char型別變數,
2 函式引數中關于陣列的宣告 如 int func(char[] c1) int func(char[10] c1) int func(char* c1) int func(char *c1) 如 int func(char[] c1) int func(char[10] c1) int func(char* c1) int func(char *c1) 這四種宣告方式都可傳送字串指標,實作相同的目的,但前兩者效果一樣,都是宣告了字符陣列型空間,后兩者本質與前兩者不同,是宣告了字符型指標變數空間,四種寫法很容易讓人誤解,特別是第二種,無任何意義 ,實際傳參時,無論陣列元素數大于或小于10都不受影響,
c語言的函式引數不允許陣列作為一個整體傳值,要實作傳遞陣列,只能依靠傳遞陣列的指標變數來實作,
c程式容易引起迷惑的地方 *的含義
如下面兩句 char *p1=”hello”;//這句話的*不是識別符號,是運算子,是在宣告p1是個指標型變數,
*p1='w';//這句話的*卻是識別符號,不是運算子,*和p1合在一起標識陣列"he"第一個元素所在的存盤盒子
程式代碼重點舉例
#include<stdio.h> int main() { char a1='2'; char* p0="world";//這個宣告的意思是,宣告一個用于存放char型地址的存盤單元,并在這個存盤單元里賦予字串"world"的地址 char *p1="hello";//這種宣告格式是c語言語法不嚴格的一個bug,容易讓人誤解,以為是宣告char型別變數,其實是在宣告地址變數, //*p0=*p1;//不能運行 *p0標識字串"world"的第一個字符所在的存盤單元,但這個存盤單元位于程式控制區,不能被賦值,只能讀取 //&a1=3;//不能運行 ,因為 &a1 這個識別符號代表數字2 ; 2不是變數盒子,所以不能被賦值,只能被讀取 char s0[10]="123456";//這個宣告的意思是,首先分配10個字符的存盤單元(這十個存盤單元統稱為陣列),然后利用"123456"這個字串,給每個存盤單元順序賦值,所以此句宣告的不是字串,宣告的是陣列 char s1[20]="abcdefghijk"; *s1 =*s0;//可以運行 注意:*s0中的*不是運算子,在這里是識別符號 ,*s0標識字串"123456"的第一個字符所在的變數盒子,在這里被讀取值"1",*s1標識字串"abcdefghijk"的第一個字符所在的變數盒子,在這里被賦值 p0=&a1;//可以運行 *s1= s0[0];//可以運行 // s0 =&a1;//不能運行,s0不代表變數盒子,s0是識別符號,代表陣列第一個元素的地址數值,s0[0]才代表該陣列第一個元素所在的變數盒子 s0[0]=a1;//可以運行 a1作為變數盒子,被讀出'2'這個字符, s0[0]是個識別符號,標識字串"123456"的第一個字符所在的變數盒子,因此可以被賦值 }
后記:學習離不開上網查閱資料記錄筆記,為方便記錄網頁資料記錄筆記,本人為chrominmu類瀏覽器如chrome、edge等開發了個名為網風筆記的擴展插件,可方便幫助采擷記錄網頁的文章、段落、圖片、多媒體等,并提供文章管理后臺以方便整理收藏,特別是針對某sdn,某網頁圖書館等限制復制的網頁有良好的輔助作用,除此之外,網風筆記還有音視頻下載、截圖涂鴉、一鍵提取文章、自由點選段落、快捷列印成A4格式檔案、網頁筆記編輯整理、定向發布等等功能,可以說是喜歡網上學習采集資料的好幫手,現免費提供給大家使用,喜歡的朋友可自行百度搜索下網風筆記安裝使用,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/518912.html
標籤:C++
上一篇:設計一個程式統計某班全體學生3門課的考試成績。要求先輸入學生人數,并輸入每個學生的三門成績,統計出每門課程的全班平均分及每個考生所有考試的總分。(二維陣列)
下一篇:C語言實作staque結構
