C語言入門 函式,指標

2021-10-21 11:59:24 字數 4573 閱讀 9881

2. 指標

3. 學習總結

輸入乙個直角三角形的斜邊和其中乙個銳角角度,求另兩個直角邊:

(輸入的角度為數字,需要變成度數,弧度=角度/180*派)

#include 

#include

int main()

編譯:gcc ********.c -o ******** -lm

結果為:

6

30a=

2.999920

b=5.196199

輸入三條邊長度,計算三角形周長:

#include 

#include

int length

(int a,int b,int c)

int main()

結果為:

345

12

輸入三條邊長度,計算三角形面積:

海**式:s = sqrt(p*(p-a) * (p-b) * (p-c))

公式中a,b,c分別為三角形三邊長,p為半周長,s為三角形的面積

#include 

#include

int length

(int a,int b,int c)

int area

(int a,int b,int c)

int main()

結果為:

345

len=

12area=

6.000000

中斷當前函式的執行,並返回乙個沒有返回值的函式用void

void 函式(引數列表)

是乙個變數,他是存放位址變數

取位址用&,對應%p

型別* 指標變數;

int* p;

p = &n;

printf("%p\n",p);

p中的存放的就是n的位址

#include 

int main()

結果為:

p=

0x7ffff8503c04

&n=0x7ffff8503c04

n=100

把指標對應位址中的取出來

printf("%d\n",*p);

驗證p解引用的值就是n的值:

#include 

int main()

結果為:

p=

0x7fffe8697014

&n=0x7fffe8697014

n=100

*p=100

n=200

*p=200

n=300

*p=300

值傳遞我們先看乙個例子

試圖通過函式來改變n的值:

#include 

void

func

(int n)

int main()

結果為:

main1 n[

0x7ffdb563312c]:

100func1 n[

0x7ffdb563310c]:

100func2 n[

0x7ffdb563310c]:

200main2 n[

0x7ffdb563312c]:

100

我們發現:呼叫函式的操作無法改變主函式變數的值

其中func(n);只是把n的值傳給引數

main函式中的nfunc中的n只是名字相同,其他都不同

void func(int n)與外面無關

如果非要有關,可以通過這種方式同步變數:

#include 

void

func

(int* p)

int main()

結果為:

main1 n[

0x7ffc2d02703c]:

100func1 n[

0x7ffc2d02703c]:

100func2 n[

0x7ffc2d02703c]:

200main2 n[

0x7ffc2d02703c]:

200

函式無法改變變數的值,但是指標可以

在函式中通過對位址的操作,改變變數的值。

理解輸入函式:scanf("%d",&n);

交換兩個變數編輯為函式(需要用指標的方式)

如果不使用指標:

#include 

void

swap

(int x,int y)

int main()

結果為:

a:

10 b:

20x:

10 y:

20x:

20 y:

10a:

10 b:

20

函式中的操作無法改變主函式中變數的值

但,如果使用指標進行操作:

#include 

void

swap

(int* x,int* y)

int main()

結果為:

a:

10 b:

20*x:

10*y:

20*x:

20*y:

10a:

20 b:

10

#include 

void

func()

int main()

a:

10 b:

20&a:

0x7ffd11ae72dc

&b:0x7ffd11ae72d8

0x7ffd11ae72dc

a:100 b:

20

a:

10 b:

20&a:

0x7ffcefa57fbc

&b:0x7ffcefa57fb8

0x7ffcefa57fb8

a:10 b:

100

輸入引數a和b,同時獲取a與b的商和餘數:

(除數為0則報錯)

#include 

int count

(int a,int b,int* div,int* rem)

else

}int main()

else

}

結果為:

25

3商為8 餘數為1

結果或為:

23

0除數不能為0

實現二元一次方程求根,輸入引數a、b、c,返回是否有根,如果有根則返回兩個根

}結果是:

263

x1:0 x2:

-2

小知識:

bool型別: 和int型別不同,bool型別的變數只能是0和1,也就是false和ture

使用前需要加標頭檔案標頭檔案 #include

在c語言函式和指標的學習過程中

要關注函式的型別,型別決定返回值是多少,其次,一旦需要返回值到主函式,應當及時在主函式中定義好新的變數迎接他;

對於指標的運用,是為了改變在主函式中定義變數的值,所以才用指標,有些值只用於傳遞,之後不使用,就不需要用指標。

C語言 指標入門

在我年輕的時候,我三次鼓起勇氣學習c,三次都倒在了指標上 雖然很清楚指標是一種存放位址的變數,但是他具體是乙個什麼意思呢?我把整個空間看成乙個 n 1 維的空間。n 是資料型別,可能是int,char,double,等等。1 是位址。把位址看成一根數軸。舉個粒子 int pa int a 5 pa ...

C語言 指標入門

指標是乙個用來指示乙個記憶體位址的計算機語言的變數或 處理器中的暫存器。簡單來說,指標 位址 指標是一種變數,也有資料型別和相應的位址。1.指標變數的定義 定義普通變數格式為 資料型別 變數名 指標變數定義如下 int p1 定義了乙個整型指標變數p1 char p2 定義了乙個字元型指標變數p2 ...

C語言入門之 指標

存放位址的變數稱為指標變數。指標變數是一種特殊的變數,它不同於一般的變數,一般變數存放的是資料本身,而指標變數存放的是資料的位址。假設在程式中宣告了1個int型的變數a,其值為68。系統為變數a分配的首位址為0x65fdf4h,p a是存放變數a位址的指標變數,即p a中存放的值為0x065fdf4...