内容简介:引入头文件,在头文件中只有函数的声明,在编译的时候会去找到函数的实现scanf(“%d”,&i);控制台输入,& 为取地址符
引入头文件,在头文件中只有函数的声明,在编译的时候会去找到函数的实现
#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(); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- NULL 指针、零指针、野指针
- 将数组和矩阵传递给函数,作为C中指针的指针和指针
- C语言指针数组和数组指针
- python(函数指针和类函数指针)
- C++ 基类指针和派生类指针之间的转换
- golang的值类型,指针类型和引用类型&值传递&指针传递
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
码出高效:Java开发手册
杨冠宝、高海慧 / 电子工业出版社 / 2018-10 / 99.00元
《码出高效:Java 开发手册》源于影响了全球250万名开发工程师的《阿里巴巴Java开发手册》,作者静心沉淀,对Java规约的来龙去脉进行了全面而彻底的内容梳理。《码出高效:Java 开发手册》以实战为中心,以新颖的角度全面阐述面向对象理论,逐步深入地探索怎样成为一位优秀开发工程师。比如:如何驾轻就熟地使用各类集合框架;如何得心应手地处理高并发多线程问题;如何顺其自然地写出可读性强、可维护性好的......一起来看看 《码出高效:Java开发手册》 这本书的介绍吧!