c語言之const和static關鍵字

一、static

作用:被修飾的內容爲靜態變量,編譯時即分配存儲空間,程序運行過程中不再分配。

修飾變量:當我們在定義沒有關鍵字的局部變量的時候,他在內存中儲存的方式是動態的,在每次到達定義變量的程序位置,則爲其分配存儲空間,跳出代碼塊即結束其生命期。而使用static關鍵字修飾局部變量,他在內存中靜態存儲,在編譯代碼的同時即爲其分配存儲空間,在程序運行期間,不再運行定義指令,可以作爲存儲需要被記憶值內容的變量,在整個程序退出時,生命期結束。

在使用static修飾全局變量時,同樣在編譯同時爲其分配存儲空間,程序結束時釋放。在我們想要某全局變量只在本文件內使用而不被其他文件調用時,我們可以使用static聲明。

void add()
{
  static int a;
  a++;
  cout<<a<<endl;
}
int main()
{
  while(1)
  {
    add();
  }
}

修飾函數:在修飾函數時,被修飾的函數只能在本文件調用,這樣可以有效防止在其他文件出現混亂的調用,這對函數本身就是一種保護機制。

二、const

作用:被修飾的內容爲常量,在程序內不可被改變值。

修飾變量:當const修飾變量時,該變量僅作爲聲明,在接下來的程序中不可再修改其值。當我們在程序中有改變值的動作時,在編譯過程中即被拋出錯誤,這樣做的好處是我們不必在程序出現bug時再去代碼中尋找錯誤。

修飾指針:

1、關鍵字修飾指針本身,就是指針本身就是常量,其定義方式如下:

const (int*) a;
//或者
int* const a;

其意義就是指針指向的內容可以被改變,而指針本身不可被改變。

2、關鍵字修飾被指向的值,指針指向的值即爲常量,其定義方式如下:

const int *a;

其意義是指針本身可以被改變,但指向的值爲常量不可變。

3、同時被修飾,既作用於被指向的值也作用於指針本身:

const int* const a;

指針本身和指向的值均爲常量,都不可被改變。

修飾函數:

1、修飾形參。當修飾形參時,參數傳入後形參在函數內部爲可讀不再被修改。

void test(const a);
​
int main()
{
  test(3);
}
​
void test(const a)
{
  return a;
}

2、修飾函數返回值。修飾函數返回值時,把他當作一個常量處理,將其賦值給同種類型的常量指針。

const int test();
int main()
{
  const int *a = test();
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章