C 指標的自解

2021-10-10 09:30:30 字數 2936 閱讀 9306

指標

語法格式:資料型別符 *指標變數名

常見術語:

/*

指標變數和其他型別的變數一樣,其初始值是不可知的,因此使用前要對他進行賦值。也就是乙個指標變數要指向程式中某乙個已知變數

*/int *p = &a; // &a表示的是a變數的位址

int *p = null; // 指標初始化為null(他是系統定義的,值為0),表示空指標

/*注意問題:

1).指標變數定義後,若不賦值,其值是不確定的,此時不可以使用該指標,如果強行使用他,則可能會引起系統崩潰

2).將指標變數賦值為null後與未對指標變數進行賦值,意義是不同的

3).不能將乙個非零的整數(或任何其他非位址型別的資料)賦給乙個指標變數,如int *p = 1000;

但是int *p = 0是合法的,他等價於int *p = null;

*/

// 1. 函式的值傳遞,無法通過形參來改變實參的值,在棧區內另外開闢了空間;

#includeusing namespace std;

void swap(int a, int b)

int main()

// 利用指標進行函式傳參

#includeusing namespace std;

void swap(int *a, int *b)

int main()

常量和指標:

敘述:即指向常量的指標,他不能修改常量的值,但可以指向其他常量和變數

int a = 1;

const *p = &a;

// 不能修改常量的值,但可以指向其他常量和變數

// 假設首先p指向a變數,其中a = 2,此時p是指向常量的指標

// 但是p可以另外指向b = 3和c = 4變數

敘述:該指標是常量,不能指向其他變數,但是可以改變指向變數的值

// 不能指向其他變數,但是可以改變指向變數的值

// 假設首先p指向a變數,其中a = 2,此時p指標是常量

// 但是p可以指向的變數名可以換成b或者c,但是值永遠是2

敘述:前兩者結合,既不能改變指標的值,又不能改變指向指標的值

函式指標

格式:資料型別 (*函式名)(資料型別 變數名)

結構體指標

#includeusing namespace std;

struct mystruct ;

// 宣告了結構物件ss,並把ss的成員初始化為20,30,40

struct mystruct ss = ;

// 宣告了乙個指標結構物件ss的指標,他的型別是mystruct*

struct mystruct *p = &ss;

// 第一種訪問變數

p -> a;

p -> b;

p -> c;

// 第二種訪問變數(不正規方法)

// 將結構體變成陣列,假設定義乙個陣列arr(陣列本身也是乙個指標)

int main() ;

int* p = arr; // 陣列名表示的是陣列第乙個值的位址名

// 用此方法來取陣列的值

cout << *p << endl;

cout << *(p+1) << endl;

cout << *(p+2) << endl;

system("pause");

return 0;

/* 所有的c/c++編譯器在排列陣列的單元時,總是把各個 陣列單元存放在連續的儲存區內,單元和單元之間沒有空隙,但在存放結構物件的各個成員的時,在某種編譯環境下,可能會需要字對齊或雙字對齊或者是別的什麼對齊,需要在相鄰的兩個成員之間加若干個"填充位元組",這就導致各個成員之間可能會有若干個位元組的空隙

*/

陣列指標

具體詳解可見

暫時沒有看嘿嘿嘿,後續補上

指標和引用的關係

such as

int a = 0;

int c = 2;

int &b = a;

b = 10;

引用實際上就是乙個指標常量!!!!!!!!

int &b = a   // 這和int *const b = &a等價

// 屬性:該指標是常量,不能指向其他變數,但是可以改變指向變數的值,不能腳踏兩條船

引用能簡化形式引數

#includeusing namespace std;

void swap(int &x, int &y); // 宣告函式

int main()

void swap(int &x, int &y)

swap的函式底層

void swap(int *const x, int * const y)
不用引用

#includeusing namespace std;

void swap(int *x, int *y); // 宣告函式

int main()

void swap(int *x, int *y)

so?!

/*

在swap(a, b)中我們傳入的a和b,而不是&s,因為在引用裡面,我們寫的s其實是上是&s,不過在編譯階段編譯器偷偷換掉了,所以我們用引用&p來接收。

建立自解壓格式的exe檔案

選擇資料夾裡所有的檔案,右鍵選擇 新增到壓縮檔案 在常規裡勾選壓縮後刪除原始檔和建立自解壓格式壓縮檔案.3.在高階那單擊自解壓選項.4.常規裡設定解壓的路徑 5.在設定這裡輸入解壓後執行的路徑,你就輸入你這檔案存放的目錄.ppstream.exe就是軟體的主執行檔案.6.模式裡,安靜模式選擇 全部隱...

emc的4道面試題自解

1.int main 問 共建立了多少程序?這道題我第乙個映像就是短路求值,然後又想到了幾何級數,以及fork函式,fork後還有fork 我的答案是20 1 19。前邊的20是程序總數,後邊 1是建立程序數 第乙個fork完後共用2個程序 id 1,id 2 第二個fork,當返回值為0時,即子程...

c 指標的指標和指標的引用

當我們把乙個指標做為引數傳乙個方法時,其實是把指標的複本傳遞給了方法,也可以說傳遞指標是指標的值傳遞。如果我們在方法內部修改指標會出現問題,在方法裡做修改只是修改的指標的copy而不是指標本身,原來的指標還保留著原來 的值。我們用下邊的 說明一下問題 輸出的是兩個2 展示一下使用指標的指標做為引數 ...