指標的存在就是為了間接訪問1.1 指標變數的兩種型別
自身的型別和指向的型別
例: int * p = null;
自身的型別:在指標變數定義的時候,將變數名拿掉(即p),剩下 int * ,這就是指標變數的型別;
指向的型別:在指標變數定義的時候,將變數名和距離最近的*拿掉(即 *p),剩下(int )就表示p指向的型別是int .
指標變數指向型別的作用:決定了指標變數所取內容的寬度,即指標變數+1 跳過的單位跨度。
1.2指標的定義
1).先定義再賦值
int a =12;
int*p;
p =&a;
2).定義的同時賦值
int a =12;
int*p =
&a;
1.3 指標的++運算
*p++ , * 和++ 的優先順序相同,但++ 後置,所以先輸出,後加一,實際使用與 i++類似。
int a[5]
=;int*p =
&a[0];
printf (
"*p = %u\n"
,*p++);
//*p ,p=p+1 ,即: 先輸出a[0]後,再指標加一
實際輸出:
*p = 111
*++p,先指標加一,即輸出a[1]
int a[5]
=;int*p =
&a[0];
printf (
"*p = %u\n",*
++p)
;//*(p+1) ,即:先指標加一,後輸出a[1],
實際輸出:
*p = 222
2.1 實現兩個數的交換
(1) 不使用指標,使用實參f發現不能進行交換
# include
int main (
void
)int
swap
(x,y)
執行結果如下:
before swap a = 12 , b = 34
after swap a = 12 , b = 34
(2)使用指標傳參實現交換
# include
int main (
void
)int
swap_pointer
(int
*p1,
int*p2)
執行結果如下:
before swap a = 12 , b = 34
after swap a = 34 , b = 12
(3)使用結構體傳參實現交換
#include
void
swap
(int
*p1,
int*p2)
;struct mystruct
;int
main
(void);
printf
("before swap : a = %d b = %d.\n"
,num.a,num.b)
;struct mystruct *p;
p =#
swap(&
(p->a),&
(p->b));
printf
("after swap : a = %d b = %d.\n"
,p->a,p->b)
;return0;
}void
swap
(int
*p1,
int*p2)
執行結果
before swap : a = 3 b = 5.
after swap : a = 5 b = 3.
總結
當形參和實參不是指標型別時,在該函式執行時,形參和實參是不同的變數,他們在記憶體中位於不同的位置,形參將實參的內容複製乙份,在該函式執行結束的時候形參被釋放,而實參內容不會改變。
對於程式(1)我們發現實參的內容沒有被改變。
特別注意:在使用指標傳參時,不要在函式裡改變指標的位址,否則就會導致傳參的不成功。
持續更新中…
C語言學習筆記
include include void swap int p1,int p2 void swapa int arr,int n void printfa int arr,int n int main int argc,char argv swap i,j printfa array,6 swapa...
C語言學習筆記
file 結構 包含在stdio.h裡 ifndef file defined struct iobuf typedef struct iobuf file define file defined endif fread 功 能 從乙個流中讀資料 函式原型 size t fread void buf...
C語言學習筆記
我們學習c語言最開始入門的時候,都是先從c語言學習 c語言教材書籍開始學習,這些是我摘要的一些內容。第一章 c 語言概述 語言概述 1.1 物件導向程式設計基本概念 1.2 c 語言是一種物件導向的程式設計 語言 1.3 c 程式結構的特點 程式結構的特點 1.4 visual c 6.0簡介 簡介...