C語言之指標

2021-09-11 08:00:38 字數 1974 閱讀 7869

位址的大小是否與int相同取決於編譯器。

int i; printf("%p",&i);

指標就是儲存位址的變數。

使用*運算子,*是乙個單目運算子,用來訪問指標的值所表示的位址上的變數。

可以做左值也可以做右值。

如:int k = *p;    *p = k+1;

左值之所以叫左值是因為出現在賦值號左邊的不是變數,而是值。

交換兩個變數的值:

void swap(int *pa, int *pb)

函式返回多個值,某些值就只能通過指標返回。

定義了指標變數,還沒有指向任何變數,就開始使用指標。

函式引數表中的陣列實際上是指標。但是指標可以用陣列的運算子進行運算。

以下函式原型是等價的:

int sum(int *ar, int n);

int sum(int *, int);

int sum(int ar, int n);

int sum(int , int);

陣列變數是特殊的指標,陣列變數本身表達位址,所以int a[10];   int *p = a;不需要使用&取位址。

[ ]運算子可以對陣列做,也可以對指標做。

*運算子可以對指標做,也可以對陣列做。

陣列變數是const的指標,所以不能被賦值。

指標和值都可以是const

如果指標是const,表示一旦得到了某個變數的位址,就不能再指向其他變數了,

int *const q = &i;  //表示q是const

*q = 26是正確的賦值

q++則是錯誤的。

指標所指的是const,表示不能通過這個指標去修改那個變數,(並不能使得那個變數成為const)

const int*p = &i;

*p = 24 //是錯誤的,因為(*p)是const

i = 26 //是正確的

p = &j //正確

看一下下面這些是啥意思?

int i;

const int* p1 = &i;

int const* p2 = &i;

int *const p3 = &i;

//判斷哪個被const了的標誌是const在*的前面還是後面,const在*後面則表示指標是const

const int a = ;

這裡的const表示陣列的每個單元都是const int,所以必須通過初始化進行賦值。

保護陣列值,因為把陣列傳入函式時傳遞的是位址,所以那個函式內部可以修改陣列的值。

為了保護陣列不被函式破壞,可以設定引數為const。

int sum(const int a, int length);

給乙個指標加1表示要讓指標指向下乙個變數。

如果指標不是指向一片連續的分配的空間,如陣列,則這種運算沒有意義。

取出p所指的那個資料來,完事之後順便把p移到下乙個位置去。

*的優先順序雖然高,但是沒有++高。

記憶體中是有0位址的,但是0位址通常是不能隨便碰的位址。

所以指標不應該具有0值。

null是乙個預定定義的符號,表示0位址。注意有的編譯器不願意你用0來表示0位址。

指標的型別:指向不同型別的指標是不能直接互相賦值的。

void*表示不知道指向什麼東西的指標,指標也可以轉換型別。

int *a = (int *)malloc(n*sizeof(int));

malloc:#include 

void * malloc(size_t size);

向malloc申請的空間的大小是以位元組為單位的。

返回的結果是void*,需要型別轉換為自己需要的型別。

如果申請失敗則返回0,或者叫做null。

free():把申請得來的空間還給系統,申請的空間最終都要還,只能還申請來的空間的首位址。

C語言之指標

指標型別的本質分析 1 指標的本質 指標的本質 一種復合的資料型別。下面我將以下面幾個作為例子進行展開分析 a int p b int p c int parvalue 3 d int pfun 分析 所謂的資料型別就是具有某種資料特徵的東東,比如資料型別char,它的資料特徵就是它所佔據的記憶體為...

C語言之指標

指標的概念 什麼是指標?如果用一句話概括的的話那就是,乙個存放記憶體空間位址的變數。指標也是乙個變數,指標存放的內容是乙個位址,該位址指向乙個記憶體空間。指標變數的定義 int p 該變數用來存放乙個空間的位址。p 代表該指標指所指向記憶體空間中的值,切記指標只能存放有效的記憶體空間位址,不能存放其...

C語言之指標

指標是c語言學習乙個重要的概念,它極大的方便了c語言程式設計,用好了指標可以幫助我們程式設計,但是同時指標也是飽受爭議,因為指標的使用很容易出錯,所以在一開始學的時候就弄懂有關指標的知識點是必要的。那麼指標是什麼呢?其實指標也是一種變數,和其他型別的變數一樣,也是儲存資料的,只是在指標變數裡面儲存的...