指標 陣列和引用

2021-08-18 13:56:50 字數 1545 閱讀 3506

資料型別和指標

首先都是定義乙個變數的資料型別,從右到左判斷

int a;a是乙個整數

int *a;a是乙個指標,指標指向int整數

int **a;a是乙個指標,指標指向另乙個指標,另乙個指標指向int整數

int a[10];帶有中括號是標識a是乙個陣列,陣列內都是int整數

int *a[10];右邊是中括號,標識a是乙個陣列,陣列內都是指標,指標都指向int整數

int (*a)[10];括號改變優先順序,a是乙個指標,往右指向乙個陣列(中括號判斷),陣列內部是int整數

int a(int b);右邊是括號,標識a是乙個函式,引數是int,返回是int

int (*a)(int b);括號改變優先順序,a是乙個指標,右邊是括號,標識這個指標指向乙個函式,引數int,返回int

int (*a[10])(int b);括號內,a是乙個陣列,陣列內都是指標,指標都指向函式

預編譯,展開巨集,編譯變成二進位制,連線多個檔案為乙個可執行檔案

static修飾區域性變數,改變的是其儲存型別為靜態區,靜態區有顯示初始化data和未初始化的bss

static修飾全域性變數,改變的是鏈結屬性,external變internal,別的.o檔案無法訪問,作用域不變

static修飾函式,改變的是鏈結屬性,external變internal,別的.o檔案無法訪問,作用域不變

作用域識別符號能被訪問的**區域大小

有**塊作用域是大括號,檔案作用域是整個檔案全域性變數或者函式,原型作用域是形參防止內部定義重複導致無效

已經定義的變數無法改變其鏈結屬性,區域性變數可以遮蔽全域性變數,全域性變數extern技術上無必要新增

const只是修改readonly屬性,和儲存無關

位圖操作

#define bit3 (0x1<<3);static a;

void set_bit3(void)

void clear_bit3(void)

直接修改位址

int *ptr;ptr = (int*)0x679a;*ptr = 0x55;

強制型別轉換,無符號數的運算優先順序要高於有符號數

指標和引用,在資料型別右邊是引用int &a = b;在=號右邊是取位址int *a = &b;

引用不能為空,指向不能改變,++操作是對變數操作,指標則會改變指向

引用大小是變數大小,指標是乙個指標大小

引用不能為空,指標可以為空

引用更加安全

取位址&,得到的是乙個指標,注意指標指向的是乙個資料型別,可能是陣列哦

int a[5],&a,得到的指標,指向乙個5個int的陣列,&a+1,就是加了5個int大小哦

int *p = &a;a+1;p+1;都是表示陣列的首位址的加減乙個int大小

open,popen,fopen

open是unix和linux的標準系統級的輸入輸出,依賴作業系統,一般開啟裝置檔案,不能移植

popen是在通過fork或者pipe,建立管道,/bin/sh   -c執行命令,一般是shell命令列

fopen是將檔案讀到緩衝區,借助檔案結構體指標訪問

返回陣列指標和引用

讀萬卷書,行萬里路 木子成 使用原型 型別別名 decltype 尾置方法返回陣列指標和引用 include 返回陣列引用只需將 改為 當為返回陣列引用時 return arr 原型返回陣列指標用法 int fun void 10 int main 型別別名返回陣列指標用法 typedef int ...

陣列 指標 引用

一 指標的概念 指標是記憶體中的位址。1 語法 型別 變數名 這裡的型別是定義了這個指標指向的變數型別。2 指標的運算子 和 1 取位址符 例如 int counta 100 int mm mm counta 假設counta所在位址是2000,這是候m 2000。include void main...

陣列 指標 引用

一 指標的概念 指標是記憶體中的位址。1 語法 型別 變數名 這裡的型別是定義了這個指標指向的變數型別。2 指標的運算子 和 1 取位址符 例如 int counta 100 int mm mm counta 假設counta所在位址是2000,這是候m 2000。include void main...