【C语言】基础整理

1.函数声明

如果使用用户自己定义的函数,而该函数的位置在调用它的函数(即主调函数)的后面(在同一文件中),应该在主调函数中对被调用的函数作声明。
声明的作用是把函数名、函数参数的个数和参数类型等信息通知编译系统,以便在遇到函数调用时,编译系统能正确识别函数并检查调用是否合法。
举例:

#include <stdio.h>
 
/* 函数声明 */
int max(int num1, int num2);
 
int main ()
{
   /* 局部变量定义 */
   int a = 10;
   int b = 20;
   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;
   else
      result = num2;

   return result; 
}

2.预编译和编译的区别

在编译系统对源程序进行编译时,自动包含了预编译正式编译两个阶段,一起呵成,不需要分别发出二次指令。
对一个源程序文件X.c进行编译
(1)先用C编译系统提供的“预编译器”(又称“预处理程序”或“预编译器”)对程序中的预处理指令进行编译预处理。
(2)正式编译

eg.对于#include <stdio.h> 指令:先把stdio.h头文件的内容读进来,取代#include <stdio.h> 这一行。由预处理得到的信息和程序其他部分一起,组成一个完整的,可用来正式编译的源程序,然后由编译系统对该源程序进行编译。


3.结构体指针变量获得其变量的成员的2种形式:

#include<stdio.h>
struct SCORE{
	int num
}score
int main(){
struct SCORE *s;
s=score;
stu.num=10;
printf("%d",s->num);
return 0;
}
  • “.”为取结构体成员变量的运算符
    stu.num=10;//给结构体成员num赋值

  • “->”通过结构体指针变量直接获取结构体变量的成员变量
    printf("%d",s->num);
    s->num等同于score.num或(*s).num


4.指针知识点总结

4.1、什么是指针?

指针是C语言的中的一个重要概念,不掌握指针就没有掌握C的精华。
由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。打个比方,一个房间的门口挂了房号为“1”,这个1就是房间的地址,或者说1指向该房间。因此,将地址形象化的成为指针,意思就是能通过它找到以它为地址的内存单元。
一个变量的地址称为该变量的指针
int point=&i;
如果有一个变量专门用来存放另一个变量的地址(即指针),则它称为指针变量,指针变量就是地址变量,用来存放地址,指针变量的值是地址(即指针)。(point就是一个指针变量)

4.2.怎么定义指针变量

举例:

#include <stdio.h>
int main()
{
int a=100,b=10;	 //定义整形变量a,b,并初始化
int *p1,*p2; 	//定义指向整形数据的指针变量p1,p2
p1=&a; 	//把a的地址赋值给指针变量p1
p2=&b;		//把b的地址赋给指针变量p2
printf("a=%d,b=%d\n",a,b); 	//输出a,b的值
printf("*p1=%d,*p2=%d\n",*p1,*p2); 	//输出a,b的值
return 0;
}

类型名 * 指针变量

*指针变量名------代表所指变量的值
指针变量名------代表所指变量的地址

eg. int *p1,*p2;

  • 指针前面的“*”表示该变量的类型为指针变量。指针变量名为p1,p2
  • 在定义指针变量时,必须指定基类型。(eg:int、float。。。)
  • 如何表示指针类型。指向整型数据的指针类型表示为“int *” ,读作“指向int的指针”,或简称“int指针”。
  • 指针变量中只能存放地址(指针),不要将一个整数赋值给一个指针变量(eg:*p1=100;是错误的)
  • 使用指针前一定要先给指针变量赋值
  • 指针变量的值是可以发生变化的,要弄清楚指针变量是指向哪个普通变量的

4.3.使用指针的目的

为了使在函数中改变了的变量值能被主调函数main所用,采取普通变量的方式,由于值是“单向传递”(值传递)方式,形参值得改变不能使实参值随之改变,所以用指针变量作为函数参数,在函数执行过程中使指针变量所指向的变量值发生变化,函数调用结束后,这些变量值得变化依然被保留下来,这样就实现了“通过调用函数使变量的值发生变化,在主调函数(如main函数)中可以使用这些改变了的值”的目的。


5.什么是宏?

5.1 定义

C语言程序中,允许用一个标识符来表示一个字符串,称为宏。宏定义是由源程序中的宏定义命令完成的,宏替换由预处理程序自动完成的。
宏定义基本方法:

#define 标识符 字符串

C语言预处理功能:

  • 宏定义
  • 文件包含
  • 条件编译

5.2、预处理指令

【C语言中凡是以#开头的都是预处理命令】

# define 宏名 字符串
# define 宏名(参数1,...,参数n) 字符串
# undef 宏名
# include "文件名"   (或<文件名>)
# if 常量表达式
# ifdef 宏名
# ifndef 宏名
# else
# endif

6.动态存储分配函数

6.1、calloc()、malloc()、free()、realloc()

函数名函数原型功能返回值
callocvoid * calloc(unsigned n,unsign size);分配n个数据项的内存连续空间,每个数据项的大小为size分配内存单元的起始地址,如不成功,返回0
freevoid free(void * p);释放p所指的内存区
mallocvoid * malloc(unsigned size);分配size字节的存储区所分配的内存区起始地址,如内存不够,返回0
reallocvoid * realloc(void * p,unsigned size);将p所指的已分配内存区的大小改为size,size可比原来分配的空间大或小返回指向该内存区的指针

7.数据定义

对程序中用到的所有变量都需要进行定义。对数据要定义其数据类型,需要时要指定其存储类别

7.1 类型标识符

常用的:
int
short
long
unsigned
char
float
double
struct 结构体名
union 共用体名
enum 枚举类型名

结构体定义形式:

	struct  结构体名
	{成员列表};
	
共用体定义形式:

	union 共用体名
	{成员列表}

用typedef定义的类型名:

typedef 已有类型 新定义类型

例如:

typedef int COUNT;

7.2 存储类别

类型功能
auto默认存储类别,自动变量
static只在本文件使用,静态变量保留原值
register寄存器变量
extern可外部使用,外部变量

变量的定义形式:

存储类别 数据类型 变量表列;

例如:
static float a,b,c;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值