超經典的C語言指標講解

2021-03-04 01:13:06 字數 1636 閱讀 7243

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 指標的基本概念 記憶體 以位元組為單位,由若干個位元組組成 為了便宜管理,給每個位元組編號 十六進製制 每乙個位元組的編號在整個記憶體都是唯一 定義變數 在計算機記憶體中去預定記憶體 各類變數所預定的空間大小不同 整型...