栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言程序设计知识点

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言程序设计知识点

文章是作者本人认为需要记录的知识点,读者选取需要的阅读。

文章目录
    • 一、C语言的关键字
    • 二、两个c文件的互相引用
    • 三、常量的定义
    • 四、C的存储类
    • 五、C语言函数
    • 六、C的作用域
    • 七、枚举
    • 八、指针
    • 九、函数指针
    • 十、回调函数
    • 十一、结构体
    • 十二、共用体
    • 十三、typedef

一、C语言的关键字
关键字 说明
auto 声明自动变量
break 跳出当前循环
case 开关语句分支
char声明字符型变量或函数返回值类型
const 定义常量,如果一个变量被 const 修饰,那么它的值就不能再被改变
continue结束当前循环,开始下一轮循环
default开关语句中的"其它"分支
do 循环语句的循环体
double 声明双精度浮点型变量或函数返回值类型
else条件语句否定分支(与 if 连用)
enum声明枚举类型
extern声明变量或函数是在其它文件或本文件的其他位置定义
float声明浮点型变量或函数返回值类型
for一种循环语句
goto无条件跳转语句
if条件语句
int 声明整型变量或函数
long 声明长整型变量或函数返回值类型
register声明寄存器变量
return 子程序返回语句(可以带参数,也可不带参数)
short声明短整型变量或函数
signed声明有符号类型变量或函数
sizeof计算数据类型或变量长度(即所占字节数)
static 声明静态变量
struct声明结构体类型
switch 用于开关语句
typedef用以给数据类型取别名
unsigned声明无符号类型变量或函数
union声明共用体类型
void声明函数无返回值或无参数,声明无类型指针
volatile说明变量在程序执行中可被隐含地改变
while 循环语句的循环条件
二、两个c文件的互相引用

代码一

#include 
#include "add.c"

int x=1;
int y=2;
int addtwonum();
int main(void)
{
    int result;
    result = addtwonum();
    printf("result 为: %dn",result);
    return 0;
}

代码二

#include 

extern int x ;
extern int y ;
int addtwonum()
{
    return x+y;
}

注意细节:
1.在本文件中引入其他文件可以使用include
2.若函数与变量的定义不在同一个文件中,通过extern关键词进行引用,通过extern声明的变量名不会有存储空间。
3.在使用其他文件的函数的时候,需要声明一下函数。

三、常量的定义

1.使用define定义
例如

#include 
 
#define LENGTH 10   
#define WIDTH  5
#define NEWLINE 'n'
 
int main()
{
 
   int area;  
  
   area = LENGTH * WIDTH;
   printf("value of area : %d", area);
   printf("%c", NEWLINE);
 
   return 0;
}

2.使用const定义
例如

#include 
 
int main()
{
   const int  LENGTH = 10;
   const int  WIDTH  = 5;
   const char NEWLINE = 'n';
   int area;  
   
   area = LENGTH * WIDTH;
   printf("value of area : %d", area);
   printf("%c", NEWLINE);
 
   return 0;
}
四、C的存储类

存储类定义 C 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C 程序中可用的存储类:
1.auto存储类
2.register存储类
3.static存储类
4.extern存储类

五、C语言函数

函数的声明当中,里面的参数名称可以不重要,但是里面的数据类型很重要。当您在一个源文件中定义函数且在另一个文件中调用函数时,函数声明是必需的。在这种情况下,您应该在调用函数的文件顶部声明函数。

传值调用:该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数不会影响实际参数。
引用调用:通过指针传递方式,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。
区别在于:前者不能改变声明的函数的值,而后者通过指针的方法改变变量的值。此点在后续实操需要注意。

六、C的作用域

形式参数、全局变量、局部变量三个作用域下的函数值是选取的不同的
例如

#include 
 

int a = 20;
 
int main ()
{
  
  int a = 10;
  int b = 20;
  int c = 0;
  int sum(int, int);
 
  printf ("value of a in main() = %dn",  a);
  c = sum( a, b);
  printf ("value of c in main() = %dn",  c);
 
  return 0;
}
 

int sum(int a, int b)
{
    printf ("value of a in sum() = %dn",  a);
    printf ("value of b in sum() = %dn",  b);
 
    return a + b;
}
七、枚举

枚举变量的定义:
1.先定义枚举类型,在定义枚举变量
2.定义枚举类型的同时定义枚举变量
3.省略枚举名称,直接定义枚举变量

八、指针

指针也就是内存地址,指针变量是用来存放内存地址的变量。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。指针变量声明的一般形式为:
数据类型 *变量名
如何使用指针?

#include 
 
int main ()
{
   int  var = 20;   
   int  *ip;        
 
   ip = &var;  
 
   printf("var 变量的地址: %pn", &var  );
 
   
   printf("ip 变量存储的地址: %pn", ip );
 
   
   printf("*ip 变量的值: %dn", *ip );
 
   return 0;
}

从上到下的结果依次为var变量的十六进制地址,IP存储的var变量的十六进制的地址,前两个的值是相同的,最后一个则是var变量的值。
空指针:在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针。

九、函数指针

函数也可以使用指针,用指针的形式指向函数,再通过指针进行调用。
例如:

#include 
 
int max(int x, int y)
{
    return x > y ? x : y;
}
 
int main(void)
{
    
    int (* p)(int, int) = & max; // &可以省略
    int a, b, c, d;
 
    printf("请输入三个数字:");
    scanf("%d %d %d", & a, & b, & c);
 
    
    d = p(p(a, b), c); 
 
    printf("最大的数字是: %dn", d);
 
    return 0;
}
十、回调函数

回调函数就是一函数执行时,将调用另外一个函数进行操作
例如:

#include   
#include 
 
// 回调函数
void populate_array(int *array, size_t arraySize, int (*getNextValue)(void))
{
    for (size_t i=0; i
    return rand();
}
 
int main(void)
{
    int myarray[10];
    
    populate_array(myarray, 10, getNextRandomValue);
    for(int i = 0; i < 10; i++) {
        printf("%d ", myarray[i]);
    }
    printf("n");
    return 0;
}
十一、结构体

结构体就相当于定义一个统一数据的数据类型,用户自己定义,例如一个图书管理系统,那么就可以声明一个结构体,结构体中包含图书管理系统会用到的变量。
声明变量的格式:

struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
} book;

一般情况下,这三个要素必须至少要出现两个,结构体的初始化可以直接跟在book后面赋值,也可以在函数中声明book结构体变量,然后通过strcpy函数将字符串的地址赋值给结构体变量.变量。结构体可以作为参数,也可以使用指针。

十二、共用体

共用体的概念同结构体相差不大,例如共用体内部可以声明多个不同类型的变量,但注意,同一时间内只能给一个变量赋值,这样才能保证值不会被损坏。
声明变量格式:

union Data
{
   int i;
   float f;
   char  str[20];
} data;
十三、typedef

使用typedef为数据类型定义新的名字,从而后面可以用这个名字进行变量的定义。typedef vs #define

#define 是 C 指令,用于为各种数据类型定义别名,与 typedef 类似,但是它们有以下几点不同:

  • typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名,比如您可以定义 1 为 ONE。
  • typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997993.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号