pointer_1 =&a;
pointer_2 =&b;
if(a
printf("a=%d,b=%d",*pointer_1,*pointer_2);
return 0;
}void swap(int *p1,int *p2)
子涵數中將p1指向的變數(a)與p2指向的變數(b)互換,即將a和b的值互換,也就是a中放的是9,b中放的是3,而pointer_1和pointer_2分別指向a和b,所以列印出來發熱結果是a=9,b=3.
總結:想通過呼叫函式來改變變數的值,應通過形參指標變數改變他們所指向的變數
2:通過指標應用陣列元素
2.1: 我們想呼叫陣列中的元素時有兩種方法,一種是下表法,如a[2];另一種是指標法,如int *p=&a[0],p =a +2.
兩者都是呼叫a[2],但第二種方法要比第一種效率高。下面看兩段程式:
檔名:指標——指向陣列
功能: 用指標的方法向陣列賦值,用指標的方法取陣列中的值
說明:好好比較兩段函式的不同
#include
int main (void)
p_a =&a[0];
for(p_a =a;p_a <(a+10);p_a++) //細看for圓括號中的語句
return 0;
}以上的程式還可以由下面的程式實現:
int main (void)
for(i =0;i <10;i++)
return 0;
}兩段程式的功能是一樣的,但第一段程式要快的多。c編譯系統是將a[i]轉換成*(a+i)來處理的,即用陣列的首位址加上偏移位址
而用指標變數直接指向元素,不必每次都重新計算位址,p++這樣的自加運算的速度是遠快於a+i的。
2.2:程式的簡寫
一些牛b的程式設計師寫程式時都是追求簡潔明瞭的,所以對於初學者看他們的程式是很頭疼的,下面看幾段程式:
程式1int a[3] =;
int i=0
int *p =a;
for(;i<2;i++)
printf(「%d」,*p++);
該段程式列印出來的是:1,5
程式2int a[3] =;
int i=0
int *p =a;
for(;i<2;i++)
printf(「%d」,*++p);
該段程式列印出來的是:5,9
程式3int a[3] =;
int i=0
int *p =a;
for(;i<2;i++)
printf(「%d」,(*p)++);
該段程式列印出來的是:1,2
程式4int a[3] =;
int i=0
int *p =a;
for(;i<2;i++)
printf(「%d」,++*p);
該段程式列印出來的是:2,3
*p++相當於*(p++)即先列印出出p指向的單元的值後,再將p++
*++p相當於*(++p)即先將p++,再列印出p指向的單元的值
(*p)++,先列印出*p,再將p指向的單元的值加1,如p指向a[0]=1,則相當於先列印出a[0],再將a[0]+1
++*p相當於++(*p),將p指向的單元的值加1後再列印出來。
C語言講解思路
1,認識c語言的組成 include main 構成 包含預定義檔案 函式體 主函式 乙個c程式有且只有乙個main函式 2,printf函式 printf hello,world n printf d,d n a,b printf d d d a,b,c 3,scanf函式 scanf d,d a...
C語言指標小結
輸出結果同上。指標變數位址加1 inti,pa,a pa a for i 0 i 9 i 輸出結果同上。2 陣列名與指標的區別 陣列名是指標常量而指標是指標變數,舉乙個例子。inti,pa,a pa a for i 0 i 9 i 輸出結果同上。這裡如果將pa換成a,那麼編譯就會出錯。原因pa是指標...
c語言指標總結
第八章 指標 知識結構 1 指標的基本概念 2 怎麼定義指標 3 指標的運算 1 指標的基本概念 記憶體 以位元組為單位,由若干個位元組組成 為了便宜管理,給每個位元組編號 十六進製制 每乙個位元組的編號在整個記憶體都是唯一 定義變數 在計算機記憶體中去預定記憶體 各類變數所預定的空間大小不同 整型...