c語言指標的基本使用

2021-09-11 19:26:12 字數 2852 閱讀 6479

指標(pointer)是c語言中乙個重點和難點,以下是對其基本使用的一些總結,適合入門的同學。除了是對自己的學習的總結之外,也希望能對大家有所幫助。

與c語言其他變數類似,指標也是一種變數,只不過它與其他變數不同,一般變數是直接包含了乙個特定的值,而指標是包含了乙個變數的值所在的位址,也就是說,指標儲存了乙個變數的位址,間接地指向乙個值。

與一般的變數一樣,指標在使用之前也必須定義:

int

*countptr;

以上語句定義了乙個int *型別的變數countptr,表示countptr是乙個指向int型別變數值的指標。這樣,countptr變數將儲存乙個位址,這個位址是另乙個int變數所在的位址。

這裡需要注意的乙個點是,當乙個定義語句有幾個變數時,每個變數前都必須加上*,如:

int

*countptr,

*anotherptr;

// int *countptr, count; // 這樣定義也是合法的,不會報錯,但第二個count是int型別的變數,可能會導致邏輯錯誤,必須注意

乙個指標必須在定義時或者在賦值語句中初始化,可以初始化成0,null或者乙個變數的位址。0,null表示指標不指向任何東西(推薦使用null,因為使用0時還得進行型別轉換)。後文討論如何將變數的位址賦值給乙個指標。

int x =3;

int*xptr;

xptr =

&x;

以上操作將變數x的位址賦值給了指標變數xptr,這樣就說指標變數xptr指向了變數x。

*,間接引用運算元,返回其運算元(必須是乙個指標變數)指向的變數的值。例如:

printf

("%d"

,*xptr)

;

以上操作列印出了xptr指向的變數x的值,即3。

我們考慮乙個交換兩個數的函式:

void

swap

(int a,

int b)

intmain()

這似乎沒有問題,但當測試之後,發現a和b並沒有交換。

這是為什麼呢?因為swap函式的兩個引數,是按值傳遞的,以實參num1把自身的值傳遞給了形參a,a和num1是兩個變數,只是他們的值相同而已,之後a的變化與num1並沒有關係,且此函式中的變數在函式執行完畢之後都會被銷毀,所以swap中進行的操作,並不會影響到外面,這樣自然就不會產生希望看到的效果。

那要怎麼實現交換兩個數的函式呢?這可以通過指標來實現。

將以上**修改為:

void

swap

(int

* a,

int* b)

intmain()

注意這裡的兩個引數型別都變成了指標,且實參使用了取位址符&,這樣引數就變成了按引用傳遞。我們同樣按以上的方式進行分析。&num1將num1的位址傳遞給了指標變數a,這樣指標變數a就指向了num1的值,當使用*a = *b對其進行操作時,就間接改變了num1的值,num2同理。

用const修飾的變數表示常量,即一旦初始化之後不可再次更改。可以使用const修飾符對指標變數進行修飾,但放在不同位置中表示不同的含義。如:

sizeof 是乙個編譯時的操作符,可以操作變數名,型別或者值,計算位元組數。

注意其對陣列、指標和一般變數的差別。

(以下用了c++語法,可不用在意,只需看sizeof部分)

#include

using

namespace std;

intmain()

可以對指標進行加減運算,但與一般的加減運算不同,對指標的加減 n 會加減指標所指向的型別所占用的位元組數的 n 倍。這種運算的作用在於對陣列進行遍歷等操作,離開陣列對指標進行這樣的操作是沒有太大意義的。

指標與指標之間的運算也是同樣的道理。

int array[20]

=;int*ptr = array;

for(

int i =

0; i <

20; i++

)for

(int i =

0; i <

20; i++

)int

* ptr1 =

&array[0]

;int

* ptr2 =

&array[4]

;cout << ptr2 - ptr1;

// 4

if(ptr1 != ptr2)

char

*strings[2]

=;

首先,從定義中的[2]可看出這是乙個陣列,這個陣列的每個元素是什麼型別的呢?char *告訴了我們。所以這是乙個大小為兩個元素的陣列,每個元素都是char *型別的,兩個元素分別初始化為"hello"和"world"。

那麼strings[0]就是"hello",strings[1]就是"world"。

strings[0][0]就是"hello"的第乙個字元『h』,以此類推。

函式指標指向了函式的首位址。

int (*compare)(int a, int b)

細節待續。

C語言 指標變數的基本使用

我們將乙個指標變數定義好之後,接下來需要考慮的問題就是如何來使用這個指標變數了。前面學習普通變數的時候,我們知道,乙個變數的操作其實就是分成讀和寫兩個步驟。而指標變數在平時使用的時候,也是主要分成讀和寫兩個操作步驟,不同於常規變數的是,指標變數的賦值運算其實是寫入乙個普通變數的位址,我們將這乙個過程...

c語言 指標的基本操作

include intmain int ptr1,ptr2,ptr3 ptr1 urn 把乙個位址賦給指標 ptr2 urn 2 printf pointer value,dereferenced pointer,pointer address n printf ptr1 p,ptr1 d,ptr1...

C語言指標的使用

1.陣列與指標 把陣列的首位址指向陣列的指標變數 int a 5 pa pa a 陣列名表示陣列的首位址也可以寫成 pa a 0 兩者是等價的 pa pa 2 pa指向a 2 空指標是由對指標變數賦予0值而得到的。對指標變數賦0值和不賦值是不同的。指標變數未賦值時,可以是任意值,但不能使用,否則會造...