C語言指標詳解

2021-09-24 10:46:25 字數 2598 閱讀 8081

以下講解是按照如下這個程式的執行順序來講解的

int a,b; //這是乙個普通的整型變數​ int *p;//這是乙個整形的指標​ a = 3;​ b = 4;

指標p定義的時候沒有進行初始化,所以在這裡,p的初始值是不確定的。當然也可以在p定義的時候賦初值,這樣p的初始值就是確定的了。

p = 1;

一元運算子&可用於取乙個物件的位址,如下,這時p為指向a的指標。位址運算子&只能應用於記憶體中的物件,即變數與陣列元素。它不能作用於表示式、常量或register型別的變數。

這時p的值是3930420,即變數a的位址;

利用&取出p的位址仍然為3930396,沒有變;

利用間接定址,

p可以得到指標p指向位址中的值為3,即a的值。

p = &a;//取址運算/* p現在指向a */printf(" 利用取址操作p = &a;,把a的位址賦值給p,現在p的值是%d,也就是a的位址;\r\n", p);printf(" p的位址沒有變化,p的位址仍然是%d,在這個位址上儲存的是變數a的位址;\r\n", &p);

p = &a;//取址運算/* p現在指向a */

printf("   利用取址操作p = &a;,把a的位址賦值給p,現在p的值是%d,也就是a的位址;\r\n", p);

printf("   p的位址沒有變化,p的位址仍然是%d,在這個位址上儲存的是變數a的位址;\r\n", &p);

printf("   利用*運算子得到指標p指向位址中的數值為%d,在剛才p已經指向變數a的位址了,所以指標p指向位址中的值是3,但是p的值仍然是a的位址;\r\n", *p);

利用*可以得到p位址中的數值,這裡b的值就是3,即a的值。

b = *p;/* b現在為a的值 */

printf("   b = *p;,現在b的值就是p指向位址中的值,也就是a的值:%d;\r\n", b);

對*p進行賦值後,也就是對p指標指向位址中的數值進行賦值,這是a的值也就變為了5

*p = 5;/* a現在為5 */

printf("   現在利用*p為p指向位址中儲存的值進行賦值:%d,這時a的值也已經改變了:%d;\r\n", *p,a);

定義兩個變數

int a=3,b; //這是乙個普通的整型變數

int *p;//這是乙個整形的指標

定義後,a的位址是0x2000,p的位址是0x3000;在定義的時候a賦的初始值是3,p沒有賦初始值,所以p的值是不確定的。

現在進行運算:

p = &a;//取址運算/* p現在指向a */

這時記憶體圖就變成了這樣,p的位址沒有變化,但是p的值變化了,此時,*p=3;

在程式設計中,指標作為函式形參往往會帶來意想不到的效果,下面用乙個例程來講解指標作為函式形參的特性。例子:用乙個函式交換兩個變數的值:

void swap(int x, int y)

​void swap_pointer(int *x, int *y)​/*

指標與函式

2019-05-09

*/void test2()

執行結果如下圖,可以明顯的看出指標作為函式形參的特性。

具體講解詳見《c語言程式設計》的5.2章節。

在c語言中,函式本身不是變數,但是也可以定義指向函式的指標。這種指標的使用方法、特性與變數指標的使用方法、特性大同小異。

下面的介紹都是圍繞這段函式來講解的

/*

xutopia

*/#include "stdio.h"

​int max(int x, int y)

​int min(int x, int y)

​int* maxp(int x, int* y)

​void callbackfun(int x, int(*f)(int, int b))

printf("\r\n");}​

typedef struct _dat

dattypedef;

​dattypedef s;

​int main()

{int maxval = 0, minval = 0;

int a = 10;

int *pval;

pval = &a;

//指標與函式

//int(*p)(int a, int b);//right

int(*p)(int, int);

p = &max;

maxval = p(1, 2);

printf("max=%d\r\n", maxval);

p = &min;

minval = p(1,

c語言指標詳解

一.指標的概念 指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的乙個位址。要搞清乙個指標需要搞清指標的四方面的內容 指標的型別,指標所指向的型別,指標的值或者叫指標所指向的記憶體區,還有指標本身所佔據的記憶體區。1.指標的型別 從語法的角度看,你只要把指標宣告語句裡的指標名字去掉,剩下的部...

C語言指標詳解

類似於 int p char p 或者自定義型別的 person p struct p 這些都是基本的指標變數,不管什麼型別的指標變數都是乙個存位址的變數,所以它們的大小都是四個位元組 還有一種void p 型別,類似於 js 或者 c 的 var 可以傳入任何型別變數的位址,也可以轉換成任何型別變...

C語言指標詳解

c語言指標應用 一 指標是什麼 指標是乙個特殊的變數,它存的是記憶體裡的乙個位址。指標四要素 1.指標的型別 把指標名字去掉,剩下的部分就是這個指標的型別。這是指標本身所具有的型別如下 1 int p 指標的型別是int 2 char p 指標的型別是char 3 int p 指標的型別是int 4...