(一) C 语言之基本数据类型输入输出指针
一, 基本数据类型
1, 头文件
引入头文件, 在头文件中只有函数的声明, 在编译的时候会去找到函数的实现
#include <stdio.h>
2, 基本数据类型
(1), 基本数据类型所使用的输出占位符
数据类型 | 占位符 |
---|---|
short | %d |
int | %d |
long | %d |
float | %f |
double | %lf |
char | %c |
十六进制 | %x |
八进制 | %o |
字符串 | %s |
(2), 基本数据类型所占字节数
数据类型 | 字节数 |
---|---|
short | 2 |
int | 4 |
long | 8 |
float | 4 |
double | 8 |
char | 1 |
二, 输入输出函数
1, 输入函数
scanf("%d",&i);
控制台输入,& 为取地址符
2, 输出函数
printf("i 的值为:%d\n",i);
控制台输输出函数
- #include <stdio.h>
- void main(){
- int i;
- printf("请输入一个整数:");
- // 赋值
- scanf("%d",&i);
- // 打印
- printf("i 的值为:%d\n",i);
- system("pause");
- }
三, 指针
1, 指针的定义
指针存储的是变量的内存地址
变量名就是对内存空间中一段数据的抽象
内存地址就是系统给数据分配的编号
- #include <stdio.h>
- void main(){
- int i = 0;
- // 指针变量, p 的值就是 i 这个变量的内存地址
- int* p = &i;
- printf("内存地址为:%#X\n",p);
- system("pause");
- }
控制台输出
内存地址为: 0X8FF764
指针类型的定义: 在基本数据类型后加 *
如:
- float f = 88.6;
- // 创建一个 float 类型的指针
- float* fp = &f;
或
- float f = 88.6;
- // 创建一个 float 类型的指针
- float *fp = &f;
通过指针修改变量的值
- void main(){
- int i = 90;
- // 创建一个 int 类型的指针变量
- int *p = &i;
- printf("i 的值为:%d\n",i);
- // p 代表变量 i 的内存地址
- //*p 代表 p 这个内存地址上的数据
- *p = 210;
- printf("i 的值为:%d\n",i);
- system("pause");
- }
控制台输出:
i 的值为: 90
i 的值为: 210
指针变量的内存地址说明:
指针变量的内存地址说明
2, 指针的类型
指针有类型, 地址没有类型;
地址只是开始的位置, 类型是指明读取到什么位置结束
3,NULL 空指针
指针为 NULL 的指针, 默认值为 0, 默认内存地址访问 0x000000 操作系统不允许
- void main(){
- int i = 9;
- int *p = NULL;
- // 空指针的默认值为 0
- printf("%#X\n",p);
- // 访问内存地址 0x000000 操作系统不允许
- printf("%d\n",*p);
- getchar();
- }
4, 多级指针
指针保存的是变量的地址, 保存的这个变量还可以是一个指针变量
- void main(){
- int a = 50;
- //p1 上保存的是 a 的地址
- int* p1 = &a;
- //p2 上保存的是 p1 的地址
- int** p2 = &p1;
- printf("p1d 的值为:%#x,p2 的值为:%#x\n",p1,p2);
- // 通过 p2 改变 a 的值
- **p2 = 90;
- printf("a 的值为:%d\n",a);
- getchar();
- }
输出结果为:
p1d 的值为: 0xcffa9c,p2 的值为: 0xcffa90
a 的值为: 90
5, 指针运算
指针的运算, 一般在数组遍历时才有意义, 基于数据在内存中线性排列的方式
- void main(){
- // 数组在内存中连续存储
- int ids[] = {78,90,23,65,19};
- // 数组的变量名: ids 就是数组的首地址
- printf("%#x\n",ids);
- printf("%#x\n",&ids);
- printf("%#x\n",&ids[0]);
- // 指针变量
- int *p = ids;
- printf("%d\n",*p);
- // 指针的加法
- p++;// 指针向前移动 sizeof(数据类型) 个字节
- printf("%d\n",*p);
- getchar();
- }
输出结果为:
- 0x7dfaa0
- 0x7dfaa0
- 0x7dfaa0
- 78
- 90
通过指针给数组赋值
- void main(){
- int uids[5];
- int* p = uids;
- //// 高级写法
- //int i = 0;
- //for (;i <5; i++){
- // uids[i] = i;
- //}
- // 早些版本的写法
- int i = 0;
- for(; p < uids + 5 ; p++){
- *p = i;
- i++;
- }
- }
6, 函数指针
函数指针的定义:
[函数返回值类型]([函数指针的名称])([函数的参数列表])
- #include <Windows.h>
- void msg(char* title,char* content){
- MessageBox(0,content,title,0);
- }
- void main(){
- //msg();
- // 函数指针
- void(*fun_p)(char* title,char* content) = msg;
- fun_p("消息标题","消息内容");
- getchar();
- }
来源: http://www.jianshu.com/p/519bee7393bc