1. 程式人生 > >變數和常量 定義和宣告的其區別

變數和常量 定義和宣告的其區別

什麼是定義?什麼是宣告?它們之間的區別是什麼?

所謂定義就是(編譯器)建立一個物件,為這個物件分配一塊記憶體,並給它取上一個名字,這個名字就是就是我們經常所說的變數名或物件名。

宣告有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 _ __ ___ ____                //(用下劃線來替代標頭檔案的東西造成掩飾,但是可以執行並且輸出)