C语言基础语言总结(二)
文章目錄
- C函數
- C作用域規則
- C數組
-
C函數
定義函數的一般形式:
return_type function_name(parameter list) {body of the function }return_type:返回類型,有些函數執行所需的操作而不返回值,在這種情況下,return_type是關鍵字void
function_name:函數名稱,函數名和參數列表一起構成了函數簽名
parameter list:參數列表,參數就像占位符。當函數被調用時,向參數傳遞一個值。參數列表包括函數參數的類型、順序、數量
body of the function:函數主體包含一組定義函數執行任務的語句
求倆個數大小實列:
函數聲明
函數聲明會告訴編譯器函數名稱及如何調用函數。函數的實際主體可以單獨定義
在一個源文件中定義函數且在另一個文件中調用函數時,函數聲明是必需的。在這種情況下,應該在調用函數的文件頂部聲明函數
調用函數
當程序調用函數時,程序控制權會轉移給被調用的函數。被調用的函數執行已定義的任務,當函數的返回語句被執行時,或到達函數的結束括號時,會把程序控制權交還給主程序
例如:
#include<stdio.h>int mian() {/*局部變量聲明*/int a=100;int b=200;int ret;/*調用函數來獲取最大值*/ret = max(a,b);printf("Max value is : %d\n",ret);return 0; }/*函數返回兩個數中較大的那個數*/ int max(int num1,int num2) {int result;if(num1>num2)result = num1;elseresult = num2;return result; }函數參數
如果函數要使用參數,則必須聲明接受參數值的變量。這些變量稱為函數的形式參數
形式參數就像函數內部的其他局部變量,在進入函數時被創建,退出函數時被銷毀
兩種向函數傳遞參數的方法
把參數的實際值復制給函數的形式參數。在這種情況下,修改函數內的形式參數不會影響實際參數
實例:
通過傳遞實際參數來調用函數swap():
#include<stdio.h> void swap(int x,int y); int main() {int a =100;int b =200;printf("交換前a的值:%d",a);printf("交換前b的值:%d",b);swap(a,b);printf("交換后a的值:%d",a);printf("交換后b的值:%d",b);return 0; }上面的代碼被編譯執行后,結果如下:
交換前a的值:100 交換前b的值:200 交換后a的值:100 交換后b的值:200雖然在函數內部改變了a和b的值,但實際上a和b的值沒有發生變化
引用調用
形參為指向實參地址的指針,當對形參的指向操作時,就相當于對實參本身進行的操作
傳遞指針可以讓多個函數訪問指針所引用的對象,而不是把對象聲明為全局可訪問
通過引用傳值來調用swap():
#include<stdio.h>void swap(int *x,int *y) int main() {int a = 100;int b = 200;printf("交換前a的值:%d",a);printf("交換前b的值:%d",b);swap(&a,&b);printf("交換后a的值:%d",a);printf("交換后b的值:%d",b);return 0; }編譯執行后,結果為:
交換前a的值:100 交換前b的值:200 交換后a的值:200 交換后b的值:100-
C作用域規則
作用域是程序中定義的變量所存在的區域,超過該區域變量就不能被訪問。c語言中有三個地方可以聲明變量:
1.在函數或內部的局部變量
2.在所有函數外部的全局變量
3.在形式參數的函數參數定義中
局部變量
在某個函數或塊的內部聲明的變量,它們只能被該函數或該代碼塊內部的語句使用
局部變量保存在棧中,只有在 所在函數被調用時才動態地為變量分配存儲單元。局部變量被定義時,系統不會對其初始化
全局變量
全局變量定義在函數的外部,通常是在程序的頂部。全局變量在整個程序生命周期內都要效,在任何的函數內部都能訪問全局變量
全局變量保存在內存的全局存儲區中,占用靜態的存儲單元
形式參數
函數的參數,形式參數,被當作該函數內的局部變量,如果與全局變量同名它們會優先使用
-
C數組
數組數據結構,它可以存儲一個固定大小的相同類型元素的順序集合。
聲明數組
要聲明一個數組,需要指定元素的類型和元素的數量
這叫一維數組。arraySize必須是一個大于0的整數常量,type可以是任意有效的c數據類型。
初始化數組
double balance[5]={1000.0,2.0,3.4,7.0,5.6}大括號之間的值得數目不能大于方括號中指定得元素數目
所有的數組都是以0作為它們第一個元素的索引,也被稱為基索引
訪問數組元素
數組元素可以通過數組名稱加索引進行訪問
聲明數組、數組賦值、訪問數組實例:
#include<stdio.h>int main() {int n[10];int i,j;for (i = 0 ; i < 10 ; i ++){n [ i ] = i + 100;}for (j = 0 ; j < 10 ; j++){printf("Element[%d] = %d\n",j,n[j])}return 0; }多維數組
聲明形式:
二維數組,在本質上是一個一維數組的列表。聲明一個x行y列的二維數組
type arrayName[x][y];初始化二維數組:
int a[3][4] = { {0,1,2,3}, /* 初始化索引號為0的行 */ {4,5,6,7}, /* 初始化索引號為1的行 */ {8,9,10,11} /* 初始化索引號為2的行 */ };內部嵌套的括號是可選的,可以去掉
傳遞數組給函數
下面這個函數,它把數組作為參數,同時還傳遞了另一個參數,根據所傳的參數,會返回數組中各元素的平均值
從函數返回數組
c語言不允許返回一個完整的數組作為函數的參數,但是可以通過指定不帶索引的數組名來返回一個指向數組的指針
如果想要從函數返回一個一維數組,必須聲明一個返回指針的函數
int * myFunction() { ... }C語言不支持在函數外部返回局部變量的地址,除非定義局部變量為static變量
下面的函數,它會生成10個隨機數,并使用數組來返回它們
#include<stdio.h> #include<stdlib.h> #include<time.h>/* 要生成和返回隨機數的函數 */ int * getRandom() {static int r[10];int i;/* 設置種子 */srand( (unsigned)time(NULL) );for ( i=0 ; i<10 ; ++i){r[i] = rand();printf("r[%d] = %d\n",i,r[i]);}return r; }/* 調用上面定義函數的主函數 */ int main() {/* 一個指向數組的指針 */int *P;int i;p = getRandom();for ( i=0 ; i<10 ; i++){printf("*(p + %d) : %d\n",i,*(p+i));}return 0; }指向數組的指針
數組名是一個指向數組中第一個元素的常量指針。因此,*(balance+4)是一種訪問balance[4]數據的合法方式
一旦把第一個元素的地址存儲在p中,就可以使用p、p+1、*(p+2)等來訪問數組元素
#include<stdio.h>int mian() {double balance[5] = {1000.0,2.0,3.4,17.0,5.6};double *p;int i;p = blance;printf("使用指針的數組值\n");for ( i = 0; i < 5; i++ ){printf("*(p + %d) : %f\n",i,*(p+i));}printf("使用balance作為地址的數組值\n");for ( i = 0; i < 5; i++ ){printf("*(balance + %d) : %f\n",i,*(balance+i));}return 0; }上面的實例中,p是一個指向double型的指針,這意味著它可以存儲一個double類型的變量。一旦有了p中的地址,*p將給出存儲在p中相應地址的值
總結
以上是生活随笔為你收集整理的C语言基础语言总结(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 巴西印度美国俄罗斯,四个国家中哪个粮食出
- 下一篇: 发动不义战争的美军被志愿者打得抱头鼠窜伤