概述
【C语言】基础整理
- 1.函数声明
- 2.预编译和编译的区别
- 3.结构体指针变量获得其变量的成员的2种形式:
- 4.指针知识点总结
- 4.1、什么是指针?
- 4.2.怎么定义指针变量
- 4.3.使用指针的目的
- 5.什么是宏?
- 5.1 定义
- 5.2、预处理指令
- 6.动态存储分配函数
- 6.1、calloc()、malloc()、free()、realloc()
- 7.数据定义
- 7.1 类型标识符
- 7.2 存储类别
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 : %dn", 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=%dn",a,b); //输出a,b的值
printf("*p1=%d,*p2=%dn",*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()
函数名 | 函数原型 | 功能 | 返回值 |
---|---|---|---|
calloc | void * calloc(unsigned n,unsign size); | 分配n个数据项的内存连续空间,每个数据项的大小为size | 分配内存单元的起始地址,如不成功,返回0 |
free | void free(void * p); | 释放p所指的内存区 | 无 |
malloc | void * malloc(unsigned size); | 分配size字节的存储区 | 所分配的内存区起始地址,如内存不够,返回0 |
realloc | void * 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;
最后
以上就是坚强小刺猬为你收集整理的【C语言】基础整理的全部内容,希望文章能够帮你解决【C语言】基础整理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复