以下講解是按照如下這個程式的執行順序來講解的
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 */利用*可以得到p位址中的數值,這裡b的值就是3,即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);
b = *p;/* b現在為a的值 */對*p進行賦值後,也就是對p指標指向位址中的數值進行賦值,這是a的值也就變為了5printf(" b = *p;,現在b的值就是p指向位址中的值,也就是a的值:%d;\r\n", b);
*p = 5;/* a現在為5 */定義兩個變數printf(" 現在利用*p為p指向位址中儲存的值進行賦值:%d,這時a的值也已經改變了:%d;\r\n", *p,a);
int a=3,b; //這是乙個普通的整型變數定義後,a的位址是0x2000,p的位址是0x3000;在定義的時候a賦的初始值是3,p沒有賦初始值,所以p的值是不確定的。int *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...