预编译、类型定义、static、extern及函数指针
2015-06-21 08:59
405 查看
1、宏定义
注意:
1、宏定义只会影响他后面的语句,它前面的不会被替换;
2、带参数的宏定义需要将参数和结果都加上(), 否则会出现错误;#define pingfang(a) (a*a);替换后就会变成5+5*5+5
2、条件编译
在编译前进行判断那段代码需要编译 那些不需要编译
二、static和extern
static:
函数 文件级私有函数,被其他文件包含了也不能使用
全局变量 文件级私有的全局变量,被其他文件包含了也不能访问
局部变量 函数内部的静态变量,函数被销毁该变量依然存在直到程序结束
extern:
全局函数 被其他文件包含了可以使用,默认情况下就是extern所以extern关键字可以省略而且不能有相同的函数民
全局变量 声明一个全局变量,默认情况下就是extern所以extern关键字可以省略,如果定义了相同的变量名那么他们是同一个变量
三、typedef
给已经存在的类型起一个新的名称
指针函数:
(1)定义:返回值为一个某一类型指针的函数称为指针函数。
(2)格式:类型说明符* 函数名(形参列表);*表示返回值为一个指针或地址。
(3)程序示例如下:
该函数打印输出p的地址,该函数属于值传递。
函数指针:
(1)定义:存放函数首地址的指针变量就是函数指针
(2)格式:类型说明符 (*变量名)(函数的参数列表);
(3)程序示例如下:
该函数打印输出结果为57。
注意:
1、函数指针变量不能进行算术运算,这是与数组指针不一样的。
2、函数调用中*两边的括号不能少,另外,*只是一个符号,不能认为是取值运算。
// 不带参数的宏定义 #define pai=3.14int main() { int a; int r=6; a=2*pai*r// 编译前会被替换为 3.14 return 0; } // 带参数的宏定义 #define pingfang(a) (a)*(a); int main() { int res = pingfang(5+5); // 编译前会被替换为 int res = (5+5)*(5+5) return 0; }
注意:
1、宏定义只会影响他后面的语句,它前面的不会被替换;
2、带参数的宏定义需要将参数和结果都加上(), 否则会出现错误;#define pingfang(a) (a*a);替换后就会变成5+5*5+5
2、条件编译
在编译前进行判断那段代码需要编译 那些不需要编译
#ifndef _WR_H_ #define _WR_H_ #include "wr.h" #end if
二、static和extern
static:
函数 文件级私有函数,被其他文件包含了也不能使用
全局变量 文件级私有的全局变量,被其他文件包含了也不能访问
局部变量 函数内部的静态变量,函数被销毁该变量依然存在直到程序结束
extern:
全局函数 被其他文件包含了可以使用,默认情况下就是extern所以extern关键字可以省略而且不能有相同的函数民
全局变量 声明一个全局变量,默认情况下就是extern所以extern关键字可以省略,如果定义了相同的变量名那么他们是同一个变量
三、typedef
给已经存在的类型起一个新的名称
// 基本数据类型 typedef int MyInt; // 指针 typedef char * String; // 结构体 typedef struct { char *name; int age; } Person; // 枚举 typedef enum { Man, Woman } Sex; // 指向函数的指针 typedef int (*MyPoint)(int, int);
指针函数:
(1)定义:返回值为一个某一类型指针的函数称为指针函数。
(2)格式:类型说明符* 函数名(形参列表);*表示返回值为一个指针或地址。
(3)程序示例如下:
#include<stdio.h> int* max(int x,inty) { return x>y?x:y; } int main(int argc,const char* argv[]) { int a=3,b=4; int *p=max(3,4); printf("%p\n",p); return 0; }
该函数打印输出p的地址,该函数属于值传递。
函数指针:
(1)定义:存放函数首地址的指针变量就是函数指针
(2)格式:类型说明符 (*变量名)(函数的参数列表);
(3)程序示例如下:
#include <stdio.h> int sum(int x,int y) { return x+y; } int main(int argc, const char * argv[]) { int s=0; int (*p)(int a,int b); //定义函数指针 p = sum; //给函数指针赋值,p指向sum,sum存的就是函数的首地址。 s = p(23,34); printf("%d\n",s); return 0; }
该函数打印输出结果为57。
注意:
1、函数指针变量不能进行算术运算,这是与数组指针不一样的。
2、函数调用中*两边的括号不能少,另外,*只是一个符号,不能认为是取值运算。
相关文章推荐
- mysql5.6 重置密码
- matlab二维数组访问和删除
- 谷歌浏览器安装QQ旋风插件
- JVM原理、架构—类加载器
- windows7系统怎么调整计算机性能?
- TCP/IP详细解释--TCP/IP可靠的原则 推拉窗 拥塞窗口
- Linux 上网络监控工具 ntopng 的安装
- U3D的飞船太空射击例子中,使用coroutine
- 网络编址与端口配置
- 计算任意一个UIView相对屏幕的坐标
- java - extends 和 implements 的区别
- font-family
- 音频编辑大师 3.3 注册名称 许可证
- poj 2385 Apple Catching dp
- Android Media Playback 中的MediaPlayer的用法及注意事项(一)
- 第十六周项目一 平方根
- HDU Group
- 浙江大学PAT_甲级_1061. Dating (20)
- ssh 配置免密码登陆
- ORACLE SEQUENCE 介绍