Java培训、Android培训、iOS培训、.Net培训、期待与您交流!

(以下内容是对黑马苹果入学视频的个人知识点总结)

(一)枚举

1)枚举类型的定义

枚举是C语言中的一种基本数据类型,并不是构造类型,它可以用于声明一组常数。

一般形式为:enum 枚举名 {枚举元素1,枚举元素2,……};

2)枚举变量的定义

①先定义枚举类型,再定义枚举变量

②定义枚举类型时同时定义枚举变量

③省去枚举名称,直接定义枚举变量

 enum Sex { Man, Woman, Unkown};
2 enum Sex sex;

(二)宏定义

1)不带参数的宏定义

一般形式:

#define 宏名 字符串

比如#define ABC 10

定义时需要注意:

1> 宏名一般用大写字母,以便与变量名区别开来,但用小写也没有语法错误

2> 对程序中用双引号扩起来的字符串内的字符,不进行宏的替换操作。

3>宏名的有效范围是从定义位置到文件结束。如果需要终止宏定义的作用域,可以用#undef命令

2)作用

其实和#include差不多,是把源程序中所有"宏名"替换成右边的"字符串"

#include <stdio.h>

int main()
{
char *name = "COUNT"; printf("%s\n", name); #define COUNT 4 int ages[COUNT] = {, , , }; for ( int i = ; i<COUNT; i++) {
printf("%d\n", ages[i]);
} // 从这行开始,COUNT这个宏就失效
#undef COUNT int a = COUNT; return ;
}

2)带参数的宏定义

一般形式:

#define 宏名(参数列表) 字符串

在编译预处理时,将源程序中所有宏名替换成字符串,并且将 字符串中的参数 用 宏名右边参数列表 中的参数替换

带参数的宏定义效率比函数高

1>使用注意:

① 宏名和参数列表之间不能有空格,否则空格后面的所有字符串都作为替换的字符串

② 带参数的宏在展开时,只作简单的字符和参数的替换,不进行任何计算操作。所以在定义宏时,一般用一个小括号括住字符串的参数。计算结果最好也用括号括起来

#include <stdio.h>

#define pingfang(a) ((a)*(a))

int main()
{ int c = pingfang(+)/pingfang(); printf("c is %d\n", c); return ;
}

(三)自定义 typedef

我们可以使用typedef关键字为各种数据类型定义一个新名字(别名)。

使用场合:

①基本数据类型

② 指针

③结构体

④枚举

⑤ 指向函数的指针

typedef struct
{
int age;
} MyStu; typedef enum {
Man,
Woman
} MySex; typedef int (*MyPoint)(int, int); typedef struct Person
{
int age;
} * PersonPoint;

(四)static和exterm

1)对函数的作用

外部函数:定义的函数能被本文件和其他文件访问

1> 默认情况下所有函数都是外部函数

2> 不允许有同名的外部函数

内部函数:定义的函数只能被本文件访问,其他文件不能访问

1> 允许不同文件中有同名的内部函数

static对函数的作用:

1> 定义一个内部函数

2> 声明一个内部函数

extern对函数的作用:

1> 完整地定义一个外部函数

2> 完整地声明一个外部函数

(extern可以省略,默认情况下声明和定义的函数都是外部函数)

2)对变量的作用

1>对局部变量

static修饰局部变量的使用场合:

1.如果某个函数的调用频率特别高

2.这个函数内部的某个变量值是固定不变的

延长局部变量的生命周期:程序结束的时候,局部变量才会被销毁 并没有改变局部变量的作用域

总结来说:

1.extern可以用来声明一个全局变量,但是不能用来定义变量

2.默认情况下,一个全局变量是可以供多个源文件共享的,也就说,多个源文件中同名的全局变量都代表着同一个变量

3.如果在定义全局变量的时候加上static关键字,此时static的作用在于限制该全局变量的作用域,只能在定义该全局变量的文件中才能使用,跟其他源文件中的同名变量互不干扰

黑马程序员——C语言基础 枚举 宏定义 自定义 static exterm的更多相关文章

  1. 黑马程序员——C语言基础语法 关键字 标识符 注释 数据及数据类型

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)C语言简单介绍 (1)C语言程序是由函数组成的任何C语言程序都是由一 ...

  2. 黑马程序员——OC语言基础语法 面向对象的思想

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结)(一)基础语法 1)关键字 @interface.@implementati ...

  3. 黑马程序员——C语言基础 函数

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)函数的定义 1> 任何一个C语言程序都是由一个或者多个程序段( ...

  4. 黑马程序员——C语言基础 scanf函数 基本运算 三目运算符

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)scanf函数 1>  简单介绍一下scanf函数   这是在 ...

  5. 黑马程序员——C语言基础 指针

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)指针 首先指针是C语言中非常重要的数据类型,如果你说C语言中除了指针 ...

  6. 黑马程序员——C语言基础 char字符 数组

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)char类型 1)存储细节 ASCII单字节表(双字节GBK\GB2 ...

  7. 黑马程序员——C语言基础 变量类型 结构体

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)变量类型 1)局部变量 1> 定义:在函数内部定义的变量,称为 ...

  8. 黑马程序员——C语言基础 流程控制 选择结构和循环结构

    ---恢复内容开始--- Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)流程控制 1> 顺序结构:默认的流程 ...

  9. 黑马程序员——C语言基础 字符串

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)字符串 1>字符串是由多个字符组合在一起形成的 2>初始 ...

随机推荐

  1. Rdlc报表 数据汇总分组展示

    1.从工具箱拉出表或者矩阵(本次使用的是矩阵) 2.选择需要的数据集,没有就新建一个数据集,名称自己起好,下面有用到 3.将行组和行列显示出来(右击报表--试图=>) 4.双击行组下的RowGr ...

  2. shell中三种引号的用法

    1.单引号 所见即所得 例如:var=123 var2='${var}123' echo var2 var2结果为${var}123 2.双引号 输出引号中的内容,若存在命令.变量等,会先执行命令解析 ...

  3. 写日志 log 到文件夹

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  4. Java数组扩容算法及Java对它的应用

    1)Java数组对象的大小是固定不变的,数组对象是不可扩容的.利用数组复制方法可以变通的实现数组扩容.System.arraycopy()可以复制数组.Arrays.copyOf()可以简便的创建数组 ...

  5. 51nod 1244 莫比乌斯函数之和

    题目链接:51nod 1244 莫比乌斯函数之和 题解参考syh学长的博客:http://www.cnblogs.com/AOQNRMGYXLMV/p/4932537.html %%% 关于这一类求积 ...

  6. 【基本技能篇】>>第2篇《如何把事情做到最好——心得》

    如何把事情做到最好——全美第一本系统阐述学习与成功之道的经典著作. ——2016年2月12日 四个阅读层次:①基础阅读,具有基本阅读的能力,包括认识字,懂得词,知会句子的基本意思等.②检视阅读(也是判 ...

  7. ExtJs 之 ComboBox级联使用

    刚接触ExtJs不到一周,项目使用ExtJs框架,有个版块用到了combobox的级联(两级),遇到了一系列的问题,两天来一直查API.网络资料,终于解决了. 先列出遇到的一系列问题(也许你也遇到过! ...

  8. 【转】js插件zClip实现复制到剪贴板功能

    相信这个功能大家平时上网经常能碰到,以前也没怎么留意怎么实现的,直到项目中需要. 网上一搜一大堆,单纯使用js方法也不是没有,但是由于各浏览器的安全机制不同,不是跨浏览器的.去看了几个常用的网站,都是 ...

  9. js localStorage 设置和取值

    定义 Storage 对象,对象有get(取值), set(设置), add(加入新值)三个方法 const Storage = {} Storage.get = function (name) { ...

  10. Linux小知识积累

    1.Linux图形界面和字符命令行界面的切换 从图形界面切换到字符界面,使用快捷键 Ctrl+Alt+F1 从字符界面切换到图形界面,使用快捷键 Ctrl+Alt+F7 2.解压文件 tar -xzv ...