11 函式傳指標

2021-06-28 08:36:41 字數 1409 閱讀 9228

//  main.c

//  指標例子1

//  指標例子2

////  created by mj on 13-3-26.

//  指標型別存位址,可以是指標也可以是乙個變數的位址

#include 

int sumandminus(int v1, int v2, int *p)

int main(int argc, const

char * argv)

剛學完指標,都可能有一大堆的疑惑,這裡我列出幾個常見的疑惑吧。

在同一種編譯器環境下,乙個指標變數所占用的記憶體空間是固定的。比如,在16位編譯器環境下,任何乙個指標變數都只占用2個位元組,並不會隨所指向變數的型別而改變。

其實,我覺得這個問題跟"陣列為什麼要分型別"是一樣的。

* 看下面的**,利用指標p讀取變數c的值

1

int i = 2;2

char c = 1;3

4//定義乙個指向char型別的指標

5char *p = &c;67

//取出

8 printf("

%d", *p);

這個輸出結果應該難不倒大家:

* 如果我改一下第5行的**,用乙個本應該指向int型別變數的指標p,指向char型別的變數c

int *p = &c;
我們再來看一下輸出:

根據變數的定義順序,這些變數在記憶體中大致如下圖排布:

其中,指標變數p和int型別變數i各佔2個位元組,char型別的c佔乙個位元組,p指向c,因此p值就是c的位址

1> 最初的時候,我們用char *p指向變數c。當利用*p來獲取變數c的值時,由於指標p知道變數c是char型別的,所以會從ffc3這個位址開始讀取1個位元組的資料:0000 0001,轉為10進製就是1

2> 後來,我們用int *p指向變數c。當利用*p獲取變數c的值時,由於指標p認為變數c是int型別的,所以會從ffc3這個位址開始讀取2個位元組的資料:0000 0010 0000 0001,轉為10進製就是513

C語言 函式傳參 傳值 傳指標 傳指標的指標

本文參考這兩篇文章 文章 一 文章二。在學習資料結構中建立單鏈表的時候,疑惑 已經定義了node,用到結構體指標的時候直接用 node就好了,為什麼還要再定義乙個 linklist呢,為什麼傳參的時候又要用linklist l呢?下面我們就來循序漸進,由淺入深來解決問題,這裡舉兩個例子作為比較。首先...

objective c 函式引數 傳位址 傳指標

原文 首先說明一下題目中的形如部分 nserror autoreleasing 這部分可能剛開始看有點兒理解不了,其實就是這樣的 nserror 這就表示乙個指向指標的指標,autoreleasing是乙個修飾符,表示傳入的是乙個通過autorelease方法返回的id物件,這在記憶體管理中用到的。...

函式傳值 傳指標和傳引用區別

函式傳值 傳值實際上是在子函式的棧裡面重新開闢乙個空間儲存傳進來的實參引數值,所以在子函式內對子函式的形參引數進行操作 賦值之類的 只是改變了子函式那個棧裡面的記憶體值,原函式的值並不會被改變,因為原函式的變數記憶體並未改變。指標傳值 情況1,原函式指標指向的值並沒有發生改變,對兩個指標操作相當於改...