一,產(chǎn)生隨機數(shù)
#include<time.h> //使用下面函數(shù)所需要的頭文件
srand(time(0));//初始化隨機數(shù)發(fā)生器,不能放進循環(huán),只需執(zhí)行一次,也可以寫為srand(time NULL); num = rand()%100; //產(chǎn)生0~100的隨機數(shù)并賦值給num
二,函數(shù)返回值——終端中輸入echo $?查詢返回值
- 有返回值的函數(shù)函數(shù)調(diào)用結(jié)束后會返回一個數(shù)值給主函數(shù)
- 無返回值的函數(shù)函數(shù)結(jié)束后無返回值,一般定義為void類型,即空類型
三,函數(shù)定義
- 函數(shù)定義
DataType FunctionName() //沒有“;”,定義的函數(shù)之間是平行的, - 函數(shù)聲明
DataType FunctionName(); //有“;”,若定義的函數(shù)放在被調(diào)用的前邊時可以省略,即定義的函數(shù)放在后面函數(shù)被調(diào)用前需聲明 - 函數(shù)調(diào)用
FuntionName(Value); //實參和形參類型順序要一致
#include<stdio.h>
void test1() //定義一個空類型函數(shù),由于在函數(shù)調(diào)用之前,故可以省略聲明
{
int i = 3;
i +=5;
printf("i = %d\n", i);
scanf("%d", &i);
printf("scanf = %d\n", i);
return; //void類型函數(shù)沒有返回值
}
int test2() //int類型函數(shù)
{
int i = 0;
int sum = 0;
for(i = 0; i < 10;i++)
sum +=i;
printf("sum = %d\n", sum);
return sum; //sum也可以為其他int型常量
}
int main()
{
test1();
int ret = test2(); //調(diào)用函數(shù)test2()及接受函數(shù)返回值sum
printf("ret = %d\n", ret);
return 0;
}
四,auto,static,extern,register和const概念
第一個文件
#include<stdio.h>
extern int test_extern(); //外部函數(shù)聲明
auto int a = 0; //動態(tài)全局變量,auto可以省略
int b = 1; //動態(tài)全局變量需要定義在引用之前
static int c = 2; //靜態(tài)全局變量需要定義在引用之前
static int d; //靜態(tài)全局變量未賦值系統(tǒng)默認為0
void test1()
{
int c = 3;
printf("c = %d\n", c);
return;
}
static void test2() //表示該函數(shù)只引用于該文件,不能被其他文件調(diào)用
{
printf("b = %d\n", b);
return;
}
void test3()
{
static int e = 4; //靜態(tài)變量只初始化一次
sum +=3;
printf("sum = %d\n", sum);
return;
}
int main()
{
int a1 = 0; //動態(tài)局部變量
static int b1 = 1; //靜態(tài)局部變量
test1();
test2();
test3() //第一次調(diào)用sum=7
test3(); //第二次調(diào)用sum=10
test3(); //第三次調(diào)用sum= 13,上面的結(jié)果證明靜態(tài)變量只初始化一次
return 0;
}
第二個文件
#include<stdio.h>
extern int a; //外部變量
int test_extern()
{
a += 10;
printf("a = %d\n", a);
return a;
}
編譯:gcc 第一個文件名 第二個文件名 -o 目標文件名
- register:寄存器變量,直接將變量存放在寄存器中,優(yōu)點速度快。缺點cpu寄存器個數(shù)有限,不可定義多個寄存器變量
- const:
const int num = 5; int const num = 5; const int *p; int const *p; //值不可更改 int* const p; //址不可更改 const int* const p; //值和址都不可更改 - 指針函數(shù): int *test(); //返回一個局部地址是不允許的,沒有意義
- 函數(shù)指針: int (*pa)();