//在一个源文件中引用另外一个源文件中定义的变量,加 extern//addtwonum.cexternint x;externint y;intaddtwonum(){return x+y;}//test.c# include<stdio.h>int x =1;int y =2;intaddtwonum();intmain(void){int result;
result =addtwonum();return0;}
3.11.3 左值和右值
左值:可以出现在表达式左边右边
右值:只能出现在右边
3.12 常量
常量是固定值,执行期间不会改变,又叫字面量
3.12.1 整数常量
221、215u、0xFeel
3.12.2 浮点常量
3.142
3.12.3 字符常量
‘x’、’\t’
3.12.4 字符串常量
“hello”
3.12.5 定义常量
1.#define
#define indentifier value#define MAX 100;2.constconst type variable = value
constint MAX =100;
//声明数组
type arrayName[size];double balance[10];//初始化数组double balance[2]={100.0,2.0};double balance[]={100.0,2.0}//访问数组double i = balance[0];//传递数组给函数int*param
int param[10]int param[]
3.20 枚举
enum DAY {//第一个默认为0,后面+1
MON=1, TUE, WED, THU, FRI, SAT, SUN
}//1.向定义枚举类型,再定义枚举变量enum DAY {
MON=1, TUE, WED, THU, FRI, SAT, SUN
};enum DAY day;//2.定义枚举类型的同时定义枚举变量enum DAY {
MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;//3.省略枚举名称,直接定义枚举变量enum{
MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;//遍历枚举#include<stdio.h>enum{
MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;intmain(){// 遍历枚举元素for(day = MON; day <= SUN; day++){printf("枚举元素:%d \n", day);}}
3.21 指针
& 访问内存地址
指针是一个变量,其值为另一个变量的地址,内存位置的直接地址,就像其他变量或常量一样,必须先声明。
//1.声明
type *var-name
int*ip;//2.使用int var =20;int*ip =NULL;//空指针
ip =&var
//2.1.在指针变量中存储的地址printf("%p\n", ip)//2.2.使用指针访问值printf("%d\n",*ip)//3.算术运算//3.1.递增
ptr++//加入 ptr 指向地址 1000 整型指针 ptr++ 为 1004//3.2int var[]={100,200,300};int i,*ptr;//指向数组地址
ptr = var
for(i=0;i <3;i++){printf("值:%d\n",*ptr );//100 200 300
ptr++;}//3.3.递减一个指针
ptr =&var[2];for( i =3; i >0; i--){printf("%d\n",*ptr );/* 移动到下一个位置 */
ptr--;}//3.4.指针比较
ptr = var;
i =0;while( ptr <=&var[MAX -1]){printf("Value of var[%d] = %d\n", i,*ptr );/* 指向上一个位置 */
ptr++;
i++;}
3.21.1 指针数组
//1.int*ptr[3];
ptr[i]=&var[i];/* 赋值为整数的地址 */printf("Value of var[%d] = %d\n", i,*ptr[i]);//2.constchar*name[]={"zz","aa"};printf("Value of names[%d] = %s\n", i, names[i]);
3.22.2 指向指针的指针
int var =300;int*ptr;int*pptr
ptr =&var;
pptr =&ptr;printf("%d",*ptr);printf("%d",**pptr);
int*getRandom(){staticint r[10];int i
/* 设置种子 */srand((unsigned)time(NULL));for( i =0; i <10;++i){
r[i]=rand();printf("%d\n", r[i]);}return r;}
3.23 函数指针
指向函数的指针变量
// 声明一个指向同样参数、返回值的函数指针类型typedefint(*fun_ptr)(int,int)intmax(int x,int y){return x > y ? x : y;}// p 是函数指针 int(* p)(int,int)=& max;// &可以省略// 与直接调用函数等价,d = max(max(a, b), c)
d =p(p(a, b), c);
//对结构体B进行不完整声明struct B;//结构体A中包含指向结构体B的指针struct A
{struct B *partner;};//结构体B中包含指向结构体A的指针,在A声明完后,B也随之进行声明struct B
{struct A *partner;};
结构体变量的初始化
struct Books
{char title[50];} book ={"C 语言","RUNOOB","编程语言",123456};
booke.title;
访问结构成员
struct Books
{char title[50];};struct Book book1;//赋值strcpy( Book1.title,"C");
结构作为函数参数
#include<stdio.h>struct Book {char title[50];};voidprintBook(struct Book book);intmain(){struct Book book1;strcpy(book1.title,"C");printBook(book1);return0;}voidprintBook(struct Book book){printf("Book title : %s\n", book.title);}
指向结构的指针
//定义指针struct Books *struct_pointer;//存储地址
struct_pointer =&Book1;//使用
struct_pointer->title;#include<stdio.h>struct Book {char title[50];};voidprintBook(struct Book *book);intmain(){struct Book book1;strcpy(book1.title,"C");printBook(&book1);return0;}voidprintBook(struct Book *book){printf("Book title : %s\n", book->title);}