static在C 中的一些用法

2021-07-24 18:27:01 字數 1429 閱讀 2798

static是與auto相對的乙個關鍵字,我們平時沒有用static修飾的變數,都是預設為auto的。所以要理解static,就先看看auto。

auto(automatic)的含義是由程式自動控制變數的生存週期,通常指的就是變數在進入其作用域的時候被分配記憶體,離開其作用域的時候被釋放;

而static是變數在程式初始化時被分配,直到程式退出前才被釋放。

1. 類的static資料成員

一般來說,乙個類的資料成員需要乙個例項(類的物件)做為載體,也就是說,對於每個物件,資料成員可以有不同的值。但對於static型別的資料成員來說,它不需要乙個例項作為載體,簡單地說:

類的靜態成員是類的組成部分,而不是物件的組成部分。(或者說所有物件共享乙個static資料成員)
所以,這樣訪問static資料成員是乙個好習慣:

class_name::static_member;(而不是object_name.static_member)
這樣可以時刻提醒自己static成員不屬於任何乙個物件,我們不需要建立物件就可以訪問它。

注意:類宣告只宣告乙個類的「尺寸和規格」,並不進行實際的記憶體分配,所以不能在類宣告內初始化static成員變數;

初始化正確方法:如果把類宣告**放在a.hpp中,則應在a.cpp裡面(類定義的外部)初始化,語法為:「type class_name::static_variable = value」(注意沒有關鍵字static)

靜態資料成員可以用來計算類物件的個數

舉個簡單的例子:

#include

class singledog;

#include"singledog.hpp"

int singledog::count=0;//在此處初始化static成員變數

singledog::singledog(int id_):id(id_)

int singledog::getcount()

在main函式(這裡沒有給出)中,每建立乙個singledog類的物件,count都會在原來基礎上增加1,所以count可以用來計算物件的個數。

2. 類的static成員函式

static成員函式的訪問與static資料成員類似;

需要注意的是,static成員函式不與任何物件相聯絡,所以它不具有this指標,從這個意義上講,它無法訪問類物件中的非靜態成員

(非static成員函式可以訪問static成員)

知識量有限,請大佬指正。

C 中extern與static的一些簡單使用

在不同的編譯單元 不同的cpp檔案 中使用同乙個變數,可以使用extern來修飾,這時候其他的編譯單元 cpp檔案 也可以使用這個變數。示例 如下 pragma once extern int a include global.h int a 1 pragma once include includ...

C 的一些用法

寫這篇部落格純屬是為了pat,在平常練習中遇到一些關於c 使用上的問題,在這裡mark一下,避免忘記。更改一些設定 只需新增下面 就行 freopen是被包含於c標準庫標頭檔案中的乙個函式,用於重定向輸入輸出流。該函式可以在不改變 原貌的情況下改變輸入輸出環境,但使用時應當保證流是可靠的。把輸入流重...

C 中的string的一些用法

1 string與字元陣列轉換 const char c string s 1234 c s.c str 2 char轉化為string char c a string s 1 c 3 擷取子串 std string str helloworld std string str2 str.substr...