正文

一.常见关键字(定义变量的名字不能和关键字相同)

  auto                break             case               char          const        continue           default             to              double          else         enum               extern            float               for             goto            if                     int               long            register        return        short              signed           sizeof            static           struct       switch             typedef          union          unsigned        void       volatile             while  

1.auto

(自动,局部变量前都有auto,因为局部变量都是自动变量,所以省略auto) 

#include <stdio.h>
int main()
{
auto int a =10; // 局部变量——自动变量,局部变量前都有auto,通常省略
return 0;
}


2.break 

在循环语句用到,停止循环。

3.char

字符类型。

4.const

const——常属性——修饰常变量。

5.continue

表示继续,用在循环里面。

6.extern 

引入外部符号。

7. for 

循环

8.register 

寄存器关键字

#include <stdio.h>
int main()
{
register int a=10;//建议把a定义为寄存器变量
return 0;
}

9.signed   

定义的变量是有符号得

#include <stdio.h>
int main()
{
int a=5;//
a=-3;
//int定义的变量是有符号得
signed int;// 与int意思一样,一般signed不写
return 0;
}

10.unsigned 

定义的变量是无符号得

#include<stdio.h>
int main()
{
unsigned int a=1;
unsigned int a=-1;//因为有unsigned ,所以a永远是正数,放入负数,也会变成正数
return 0;
}

11. struct 

结构体关键字

12. union

联合体/共用体

13.void

无或者空

14.typedef

typedef顾名思义是类型定义,应该理解为类型重命名

#include <stdio.h>
int main()
{
typedef unsigned int u_int;//typedef——类型定义——类型重定义
unsigned int pp1=0;
u_int pp2=0; //pp1和pp2两个变量的类型是一样得
return 0;
}

15.static 

在C语言中static是用来修饰变量和函数的。

15.1static修饰局部变量

#include <stdio.h>
void test()
{
int a=1;
a++;
printf("%d\n",a);//打印的结果为2,2,2,2,2
return 0;
}
int main()
{
int p=0;
while(p<5)
{
test();
p++;
}
return 0;
}

修改后

#include <stdio.h>
void test()
{
static int a=1; //a是一个静态的局部变量
a++;
printf("%d\n",a);//打印的结果为2,3,4,5,6
return 0;
}
int main()
{
int p=0;
while(p<5)
{
test();
p++;
}
return 0;
}

结论:局部变量的生命周期边长。

15.2static修饰全局变量

#include <stdio.h>
int main()
{
extern int p_jj;//extern用来声明外部符号
printf("%d\n",p_jj);//打印的结果为10
return 0;
}
int p_jj=10;//全局变量

修改后

#include <stdio.h>
int main()
{
extern int p_jj;//extern用来声明外部符号
printf("%d\n",p_jj);//报错(无法解析的外部符号)
return 0;
}
static int p_jj=10;//全局变量被限制,只能在自己所在的源文件内部使用;出了源文件没法再使用。

结论:改变了变量的作用域——让静态的全局变量只能在自己所在的源文件内部使用;出了源文件没法再使用。

15.3static修饰函数

#include <stdio.h>
extern int PJJ(int,int);//函数声明
int main()
{
int p1=20;
int p2=30;
int sum=PJJ(p1,p2);
printf("%d\n",sum);//打印的结果为50
return 0;
}
int PJJ(int x,int y)//一个函数
{
int z=x+y;
return z;
}

修改后

#include <stdio.h>
extern int PJJ(int,int);//函数声明
int main()
{
int p1=20;
int p2=30;
int sum=PJJ(p1,p2);
printf("%d\n",sum);//报错(无法解析的符号PJJ)
return 0;
}
static int PJJ(int x,int y)//static修饰函数——不准确,static修饰函数改变了函数的连接属性。
{
int z=x+y;
return z;
}

结论:也是改变了函数的作用域——不准确,

static修饰函数改变了函数的连接属性。

正常的函数有外部的连接属性(只要把函数声明一下就可以使用了)                           到(函数前加static)           内部的连接属性(只能在源文件内部使用)。

二.#define定义常量和宏

//define 定义标识常量
//#define PJJ 10
//define 定义宏

函数的方式

#include <stdio.h>
int Pjj(int x,int y)
{
if(x>y) //函数的实现
return x;
else
return y;
}
int main()
函数
{
int a=10;
int b=20;
int sum=PJJ(a,b)
printf("%d\n",sum);//输出为20
return 0;
}

宏的方式

#include <stdio.h>
#define PJJ(x,y) (x>y?x:y)
int main()
{
int a = 10;
int b = 20;
int sum = PJJ(a, b); //sum=(a>b?a:b);
printf("%d\n", sum); //输出为20
return 0;
}

三.指针

内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的。所以为了有效的使用内存,就把内存划分成一个个小的内存单元 ,每个内存单元的大小是1个字节。为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址

如何产生地址:

32位  (可以产生232个地址)

32根地址线/数据线

通电后有正电(1)和负电(0)

00000000000000000000000000000000
00000000000000000000000000000001
00000000000000000000000000000010
.........
11111111111111111111111111111111
地址由空间组成
一个字节就是一个空间
#include <stdio.h>
int main()
{
int a=10;//四个字节
//&a 取地址
//(int* p=&a)有一种变量是来存放地址的——指针变量//p是指针变量
printf("%p\n",&a);
//*p//*——解引用操作符
return 0;
}
int a=10;    地址:0x0013ff04
//创建一个变量 10
int* p=&a; //p里面存的地址:0x0013ff04

*p=20; //*p就是a,把这地方的20放到a里面
//指针是个变量

#include <S tdio.h>
int main()
{
printf("%d\n",sizeof(char *));
printf("%d\n", sizeof(short *));
printf("%d\n", sizeof(int *));
printf( "%d\n", sizeof(double *));
return 0;
}

:指針大小在32位平台是4个字芍, 64位平台是8个字芍.

64位

64根地址线/数据线

通电后有正电(1)和负电(0)

四.结构体

#include <stdio.h>
//结构体
//char int double ....
//人=3.14
//书一复杂对象
//名字+身高+年龄+身份证号码....
//书名+作者+出版社+定价+书号...
// 复杂对象一结构体一我们自己创造山来的一种关型
//创建一个结构体类型
struct Book
{
char name[20]; //c语言程序设计
short price; //55
}; //利用结构体类型——创建一个该类型结构体的变量
int main()
{
struct Book b1={"c语言程序设计",55}
printf("书名:%s\n",b1.name);//输出 书名:c语言程序设计
printf("价格:%d\n",b1.price);//输出 价格:55
b1.price=15; //price 是变量 可以改
printf("修改后的价格:%d\n",b1.price);//输出 修改后的价格:15
return 0;
}
总结://. 表示 结构体变量.成员

利用pp来打印我的书名和价格

#include <stdio.h>
struct Book
{
char name[20]; //c语言程序设计
short price; //55
}; //利用结构体类型——创建一个该类型结构体的变量
int main()
{
struct Book b1={"c语言程序设计",55}
struct Book* pp=&b1; //指针变量pp
printf("书名:%s\n",pp->name);//输出 书名:c语言程序设计
printf("价格:%d\n",pp->price);//输出 价格:55

return 0;
}
总结://- 表示 结构体指针-成员
#include <stdio.h> 
#include <string.h>
struct Book
{
char name[20]; //c语言程序设计
short price; //55
}; //利用结构体类型——创建一个该类型结构体的变量
int main()
{
struct Book b1={"c语言程序设计",55}
// b1.price=15; //price 是变量 可以改
//b1.name="c++"//会报错,不能改,//name是一个数组名,本质上是个地址
strcpy(b1.name,"c++");//strcpy——string copy——字符串拷贝——库函数——string,h
printf("%s\n",b1.name);//打印的结果为 c++
return 0;
}
//字符串 name 名字更改的方式 要用到strcpy(关于字符串操作的库函数)


结构体的初始化;

//打印结构体信息 struct Stu s = {"张三”,20,“男","20180101"};

//为结构成员访问操作符 printf("name = %s age=%d sex=%s id=%s\n",s.name, s.age, s.sex, s.id);

//->操作符 struct Stu *ps = &s;

printf("name = %s age= %d sex=%s id=%s\n",ps->name, ps->age, ps->sex, ps- >id);

27号要开始专升本集训,博客的更新也会慢一点。