變數和常量 定義和宣告的其區別
什麼是定義?什麼是宣告?它們之間的區別是什麼?
所謂定義就是(編譯器)建立一個物件,為這個物件分配一塊記憶體,並給它取上一個名字,這個名字就是就是我們經常所說的變數名或物件名。
宣告有2重含義:
(1) 告訴編譯器,這個名字已經匹配到一塊記憶體上,下面的程式碼用到變數或者物件是在別的地方定義的。宣告可以出現多次。
(2) 告訴編譯器,這個名字已經被預定了,別的地方再也不能用它來作為變數名或物件名。
定義和宣告的最重要區別就是:
定義建立物件併為這個物件分配了記憶體,宣告沒有分配記憶體。
如: extern int a;宣告一個變數
extern Int a=56;定義一個變數
int a=56; int a;均為定義一個變數
變數的宣告有兩種情況:
1、一種是需要建立儲存空間的。例如:int a 在宣告的時候就已經建立了儲存空間。
2、另一種是不需要建立儲存空間的。 例如:extern int a 其中變數a是在別的檔案中定義的。
總之就是:把建立空間的宣告稱為“定義”,把不需要建立儲存空間的稱為“宣告”。
基本型別變數的宣告和定義(初始化)是同時產生的;
而對於物件來說,宣告和定義是分開的。
(我們宣告的最終目的是為了提前使用,即在定義之前使用,如果不需要提前使用就沒有單獨宣告的必要,變數是如此,函式也是如此,所以宣告不會分配儲存空間,只有定義時才會分配儲存空間。)常量:計算機記憶體裡不變的量
變數:經常改變的資料
變數命名的規則:1:識別符號 :不能以數字開頭,只能以字母或者下劃線開頭 而且只能由字母,數字,下劃線組成 (例如C#就不可以)。函式名也是這種命名規則。
c語言中的關鍵字不能做識別符號(例如for while char)。例如int _table = 3.14;
特例:int new=2;(new是C++裡的關鍵字,在C中可以做識別符號) ¥123(這個也可以,貨幣符號已經被看成字母,所以可以做識別符號)
2:變數的定義,int a,b,c; (表示分別定義a,b,c三個變數並給它們一個記憶體,它們的記憶體都不同,對應各自的賦值)
也就是分為兩步,分配記憶體 ,賦值給變數
程式的開始變數就應該初始化(也就是賦值),如果不初始化,也可以編譯成功,但是執行可能會報錯
3:轉義字元:
\a(響鈴)
\n(換行)
\b(前移一格)
\f (換頁)
\ r(回車)
\t(當前游標退四格)
\\代表反斜線字元“\”
\"代表一格引號”
\’代表一格單引號’
\ddd (一到三位n進位制數所代表的任意字元)
\xhh (一到兩位十六進位制數所代表的任意字元)
#include<stdio.h>
void main(){
putchar('\141'); 用八進位制列印字母a
getchar();
}
putchar('\x61'); 用十六進位制列印字母a
putchar((char)97); 用十進位制列印字母a \\注意
附:用Dos命令(win+R鍵開啟)開啟應用程式時,只需要拷貝檔案所在位置並且加上引號就可以執行
用vs或者記事本開啟應用程式時,需要拷貝檔案所在位置並且加上引號並且將 \ 改成 \\ 將 ” 改成 \" 然後執行就可以了
printf(“%d,%x”,num,&num); //%d是轉換成十進位制,%x是轉換成十六進位制 &是獲取記憶體地址的符號
#include<stdio.h>
void main(){
int a,b,c=0;
printf( "%x, %x, %x",&a,&b,&c ); 獲取變數a,b,c的記憶體地址
getchar();
}
#include<stdio.h>
void main(){
int a,b,c;
printf( "%x, %x, %x",&a,&b,&c ); //獲取a,b,c的記憶體地址
a=1;
b=2;
c=a+b;
getchar();
}
#include<stdio.h>
#define pai 3.14 // 注意這個定義方式後面不用加分號 叫全域性常量
void main(){
int a=5;
int rad=pai*30*30; //定義常量的一種方式
printf("%d",a);
printf("\n");
printf("%d",rad);
printf("\n");
getchar();
}
#include<stdio.h>
void main(){
const float pai= 3.14; //注意這種定義方式後面有分號且有等於號 叫區域性常量
float rad=pai*30*30; //定義常量的第二種方式
printf("%f",rad);
getchar();
}
附 (int %d float %f char %c )這是相互對應的
#include<stdio.h>
void main(){
int a=1;
int b=2; //數值a和b的調換
a=a+b;
b=a-b;
a=a-b;
printf("%d,%d" , a,b);
getchar();
}
#include<stdio.h> //入口函式
#include<stdlib.h>
void main(){
printf("姓名");
printf("\n"); //換行
printf("班級");
printf("\f"); //換頁
printf("年齡");
printf("\t"); //退格
printf("興趣");
printf("\r"); //回車
putchar('\141'); //輸出八進位制數所代表的字元a
putchar('\x61'); //輸出十六進位制數所代表的字元a
putchar((char)97); //輸出十進位制數所代表的字元a
system("\"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\""); //開啟谷歌瀏覽器
getchar();
}
#include<stdio.h>
#include<stdlib.h>
void main(){ //輸出helloworld並且同時開啟計算器和記事本
printf("HelloChina");
system("start calc");
system("start notepad");
getchar();
}
最後有個關於bug的思路,不是很理解一直沒執行出來
標頭檔案 例如 china.h
#define 常量名 常量值
,
,
,
原始檔 例如 1.cpp
#include<stdio.h>
#include"引用標頭檔案"
void _ __ ___ ____ //(用下劃線來替代標頭檔案的東西造成掩飾,但是可以執行並且輸出)