预处理指令

/*  不带参数的宏定义1.所有的预处理指令都是以#开头2.预处理指令分3种1> 宏定义2> 条件编译3> 文件包含3.预处理指令在代码翻译成0和1之前执行4.预处理的位置是随便写的5.预处理指令的作用域:从编写指令的那一行开始,一直到文件结尾,可以用#undef取消宏定义的作用6.宏名一般用大写或者以k开头,变量名一般用小写 与变量进行区别*/
#include <stdio.h>//#define kCount 4int main()
{char *name = "COUNT"; //用双引号引起来是不会进行替换的printf("%s\n", name);#define COUNT 4int ages[COUNT] = {1, 2, 67, 89};for ( int i = 0; i<COUNT; i++) {printf("%d\n", ages[i]);}// 从这行开始,COUNT这个宏就失效
#undef COUNTint a = COUNT;return 0;
}

/*1.带参数的宏定义效率比函数高*//*
int sum(int a, int b)
{return a + b;
}*/
#include <stdio.h>#define sum(v1, v2) ((v1)+(v2))#define pingfang(a) ((a)*(a))  //注意为了计算的正确  参数与结果值都要加小括号  宏只负责替换 结果是在运行时才会计算 如果出现了优先级的问题不加括号是会计算错误的 (*、/)int main()
{// pingfang(5+5) (10*10)// pingfang(5+5)// pingfang(5+5) (35)// pingfang(5+5)/pingfang(2)int c = pingfang(5+5)/pingfang(2);printf("c is %d\n", c);/*int c = sum(2, 3) * sum(6, 4);  //注意如果宏定义中后面的值如果不加括号计算结果是不正确的   2+3*6+4 =24 应该是50 宏加了括号 (2+3)* (6+4)printf("c is %d\n", c);*//*int a = 10;int b = 20;int c = sum(a, b);printf("c is %d\n", c);//int c = sum(a, b);*/return 0;
}

条件编译

#include <stdio.h>// 只要写了#if,在最后面必须加上#endif//#define A 5int main()
{
#ifndef A
//#ifdef A
//#if !defined(A)printf("哈哈\n");
#endif//int a = 10;/*if (a == 10){printf("a是10\n");}else if (a == 5){printf("a是5\n");}else{printf("a其他值\n");}*//*#if (A == 10)printf("a是10\n");
#elif (A == 5)printf("a是5\n");
#elseprintf("a其他值\n");
#endif*/return 0;
}

typedef

/*1.作用:给已经存在的类型起一个新的名称2.使用场合:1> 基本数据类型2> 指针3> 结构体4> 枚举5> 指向函数的指针*/#include <stdio.h>typedef int MyInt;
typedef MyInt MyInt2;// 给指针类型char *起一个新的类型名称String
typedef char * String;/*
struct Student
{int age;
};
typedef struct Student MyStu;
*//*
typedef  struct Student
{int age;
} MyStu;
*/typedef struct
{int age;
} MyStu;/*
enum Sex {Man, Woman};
typedef enum Sex MySex;
*/typedef enum {Man,Woman
} MySex;typedef int (*MyPoint)(int, int);int minus(int a, int b)
{return a - b;
}int sum(int a, int b)
{return a + b;
}
/*
struct Person
{int age;
};typedef struct Person * PersonPoint;
*/typedef struct Person
{int age;
} * PersonPoint;int main()
{// 定义结构体变量struct Person p = {20};PersonPoint p2 = &p;//struct Person *p2 = &p;//MyPoint p = sum;//MyPoint p2 = minus;//int (*p)(int, int) = sum;//int (*p2)(int, int) = minus;//p(10, 11);//MySex s = Man;//enum Sex s = Man;//enum Sex s2 = Woman;// struct Student stu3;//MyStu stu = {20};//MyStu stu2= {21};return 0;
}

typedef使用注意

#include <stdio.h>//#define Integer int//typedef int Integer;//typedef unsigned long int MyInt;#define String2 char *typedef char * String;int main()
{/*int a,b;int a;int b;*///s1、s2是char *指针
    String s1, s2;/*String s1;String s2;*/s1 = "jack";s2 = "rose";// s3才是char *指针,s4只是char
    String2 s3, s4;/*char *s3, s4;char *s3;char s4;*///String2 s3 = "jake";/*String s1;String s2;*///Integer i = 10;return 0;
}

include

/*1.<>表示系统自带的文件,""表示自定义的文件2.不允许循环包含,比如a.h包含b.h,b.h又包含a.h*/#include "lisi.h"
#include "wangwu.h"#include <stdio.h>int main()
{int c = sum(10, 19);printf("c is %d\n", c);return 0;
}#ifndef LISI_H
#define LISI_Hint sum(int a, int b);#endif

static与extern对函数的作用

/*外部函数:定义的函数能被本文件和其他文件访问1> 默认情况下所有函数都是外部函数2> 不允许有同名的外部函数内部函数:定义的函数只能被本文件访问,其他文件不能访问1> 允许不同文件中有同名的内部函数static对函数的作用:1> 定义一个内部函数2> 声明一个内部函数extern对函数的作用:1> 完整地定义一个外部函数2> 完整地声明一个外部函数(extern可以省略,默认情况下声明和定义的函数都是外部函数)*/// 声明一个test函数
// 完整地声明一个外部函数
// extern可以省略
//extern void test();
void test();//void test2();int main()
{test();//test2();return 0;
}//void test()
//{
//
//}
static void test2()
{}#include <stdio.h>// 声明一个内部函数
static void test2();// 完整地定义一个外部函数
/*
extern void test()
{printf("调用了test函数\n");
}*/
// 默认情况下,所有的函数都是外部函数,所以可以省略extern
void test()
{printf("调用了test函数\n");test2();
}// 定义一个内部函数
static void test2()
{printf("调用了test2函数\n");
}

static与extern对变量的作用

/*全局变量分2种:外部变量:定义的变量能被本文件和其他文件访问1> 默认情况下,所有的全局变量都是外部变量1> 不同文件中的同名外部变量,都代表着同一个变量内部变量:定义的变量只能被本文件访问,不能被其他文件访问1> 不同文件中的同名内部变量,互不影响static对变量的作用:定义一个内部变量extern对变量的作用:声明一个外部变量static对函数的作用:定义和声明一个内部函数extern对函数的作用:定义和声明一个外部函数(可以省略)*/
#include <stdio.h>void test();// 定义一个外部变量//int a;   如果是全局变量,这么多个a都是代表同一个a
//int a;   前面默认可不是extern  如果a放到函数的后边,函数前用 extern int a 是声明变量 其它外部文件中定义 int a和它也是一个
//int a;
//int a;
//int a;// 定义一个内部变量
static int b;// 声明一个外部变量
//extern int a;int main()
{//b = 10;//test();extern int a;a = 10;/*a = 10;test();printf("a的值是%d\n", a);*/return 0;
}int a;#include <stdio.h>int a;static int b;void test()
{printf("b的值是%d\n", b);/*printf("a的值是%d\n", a);a = 20;*/
}

static与局部变量

#include <stdio.h>/*static修饰局部变量的使用场合:1.如果某个函数的调用频率特别高2.这个函数内部的某个变量值是固定不变的*/void test()
{static double pi = 3.14;double zc = 2 * pi * 10;int a = 0;a++;printf("a的值是%d\n", a); // 1/*static修饰局部变量:1> 延长局部变量的生命周期:程序结束的时候,局部变量才会被销毁2> 并没有改变局部变量的作用域3> 所有的test函数都共享着一个变量b*/static int b = 0;b++;printf("b的值是%d\n", b); // 3
}int main()
{for (int i = 0; i<100; i++) {test();}test();test();test();return 0;
}

递归

/*
设计一个函数,用来计算b的n次方递归的2个条件:1.函数自己调用自己2.必须有个明确的返回值
*/
#include <stdio.h>
int pow2(int b, int n);int main()
{int c = pow2(3, 2);printf("%d\n", c);return 0;
}/*pow2(b, 0) == 1pow2(b, 1) == b == pow2(b, 0) * bpow2(b, 2) == b*b == pow2(b, 1) * bpow2(b, 3) == b*b*b == pow2(b, 2) * b1> n为0,结果肯定是12> n>0,pow2(b, n) == pow2(b, n-1) * b*/int pow2(int b, int n)
{if (n <= 0) return 1;return pow2(b, n-1) * b;
}/*
int pow2(int b, int n)
{// 用来保存计算结果int result = 1;//result *= b;//result *= b;//result *= b;//result *= b;//....//n次for (int i = 0; i<n; i++){result *= b;}return result;
}*/

转载于:https://www.cnblogs.com/iedo/p/5048493.html

C语言-07其它相关相关推荐

  1. C语言的math相关的函数

    C语言的math相关的函数 fabs abs acos asin atan atan2 ceil cos cosh exp fabs floor fmod hypot ldexp log log10 ...

  2. c语言中条件编译相关的预编译指令

     一. 内容概述 本文主要介绍c语言中条件编译相关的预编译指令,包括#define.#undef.#ifdef.#ifndef.#if.#elif.#else.#endif.defined. 二. ...

  3. c语言中有关随机数的程序,C语言中随机数相关问题

    用C语言产生随机数重要用到rand函数.srand函数.及宏RAND_MAX(32767),它们均在stdlib.h中进行了声明. int rand(void);//生成一个随机数 voidsrand ...

  4. 【校招VIP】前端JS语言之语法相关

    考点介绍: 简单来说JavaScript也是一门轻量级的编程语言,只是他可插入到HTML中,而后由浏览器执行. 一个完整的JavaScript基本由3部分组成: 第一部分:ECMAScript是核心 ...

  5. C语言 二叉树的相关操作

    C语言 二叉树的相关操作 // 头文件 #ifndef __BITREE_H__ #define __BITREE_H__ #define _CRT_SECURE_NO_WARNINGS #inclu ...

  6. Day 07 DjangoORM相关操作(增删改查)

    Day 07 DjangoORM相关操作(增删改查) 前提条件:配置数据库 **PROJECT.settings**.py DATABASES = {'default': {'ENGINE': 'dj ...

  7. 哈工大信息检索研究室 语言技术平台相关技术简介

    模块名称:中文文本自动断句模块 哈工大信息检索研究室 语言技术平台相关技术简介 平台总指导:刘挺教授 平台架构及程序实现负责人:郎君 下列模块按平台处理顺序列出 模块名称:中文文本自动断句模块 负责人 ...

  8. 易语言数据库读取相关数据

    本课用的命令 读() 取记录号 () 取记录数() 到首记录 () 到尾记录 () 打开() 关闭() 跳过() 跳到() 本课实现功能 读,上一条,下一条,读首记录,读尾记录,读所有记录 视频链接: ...

  9. R语言关于心脏病相关问题的预测和分析

    简介 背景 心脏病由心脏结构受损或功能异常引起包括先天性心脏病和后天性心脏病,不同类型的心脏病表现不同,轻重不一. 本报告是基于R语言对心脏研究的机器学习/数据科学调查分析.更具体地说,我们的目标是在 ...

最新文章

  1. showimg.php,layer弹出图片
  2. 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
  3. JQuery 实现遮罩层
  4. TIMESTAMP 与 explicit_defaults_for_timestamp
  5. LeetCode 213 House Robber II Python
  6. Qt Creator检查代码语法
  7. 计算机 java_Java程序到底是如何运行的?
  8. 关闭或开启memory_target
  9. dictionary 用linQ排序
  10. delphi7 mysql控件_Delphi7连接MySql数据库-DBGrid控件显示数据
  11. Eclipse中【Maven下载时,下载源码】设定方法
  12. 深度优先搜索-和为某数的所有组合
  13. bzoj2648/2716 kdtree
  14. 未找到“SocialiteProviders \ Manager \ ServiceProvider”类
  15. 东方时尚驾校的学车经历
  16. 【已解决】Android Studio下,gradle project sync failed 错误
  17. 如何运营高效的社群?
  18. Python哲学之import this,诠释代码之美
  19. android 摄像头 ip,摄像头已连接,但没有发生任何事情,openCV-IP摄像头Android
  20. OPC是什么及OPC简介

热门文章

  1. Web前端三大主流框架是什么?Web前端前景与就业形势
  2. 死锁、EAT、页表、单双缓冲区典型题目及解析
  3. 幅度和幅值有区别吗_16G内存够用吗?8G/16G/32G内存横向对比
  4. linux 自定义安装软件,在/ usr中跟踪Linux上自定义软件安装的最佳实践?
  5. 进程间通信(未完成)
  6. oracle客观题题库,oralce题库及答案.doc
  7. winxp制作服务器,你要知道的WinXP服务器操作系统安装的方法
  8. mysql sql 多选项_mysql – SQL选择此选项可使值仅出现一次
  9. HDU-1253-胜利大逃亡(bfs)
  10. ubuntu环境搭建四:安装和使用git