c语言基本类型和指针

//导入标准函数库(类似于java的导包)
#include <stdio.h>
//导入标准函数库(system、sizeof等等......)
#include <stdlib.h>
//windows系统的api
#include <Windows.h>

/*
void main(){
	//输出函数
	printf("hello world!");
	//这是一个命令(在window里面特有的)
	system("pause");
}
*/

//2、基本数据类型(int char float double long int short)
/*
%d  -  int
%ld – long int
%c  - char
%f -  float
%u – 无符号数
%hd – 短整型
%lf – double
%x – 十六进制输出 int 或者long int 或者short int
%o -  八进制输出
%s – 字符串
*/
/*
void main(){
	int i = 28;
	char c = 'D';
	float f = 12.56;
	double d = 99.999;
	long l = 3544546;
	short s = 50;
	//控制台输出数据,需要使用占位符
	//int->%d
	printf("输出int类型的值:%d\n",i);
	//char->%c
	printf("输出char类型的值:%c\n", c);
	//float->%f
	printf("输出float类型的值:%f\n", f);
	//long int->%ld
	printf("输出long类型的值:%ld\n", l);
	//double(类似于long float)->%lf
	printf("输出double类型的值:%lf\n", d);
	//short->%x
	printf("输出short类型的值:%x\n", s);
	system("pause");
}
*/

//3、输入输出函数
/*
void main(){
	//注意:i
	int i = 100;
	//输出函数
	printf("请输入一个整数:");
	//输入函数(注意:输入函数赋值需要的是地址,而不是值)
	//scanf("%d",&i);
	//注意:不同编译工具,对函数支持不一样
	scanf_s("%d", &i);
	//打印i的值
	printf("赋值之后的i的值:%d",i);
	system("pause");
}
*/

//4、取地址,并且根据地址取值
/*
void main(){
	int i = 100;
	//输出i的值
	printf("i的值:%d\n",i);

	//输出i的地址
	//&i:取出i变量的地址
	//注意:输出地址,占位符%p
	printf("i的地址:%p\n",&i);

	//根据地址获取值:*(&i)
	//总结:&表示取地址  *表示根据地址取值
	printf("根据i的地址取出i的值%d\n",*(&i));
	
	//什么是变量名:就是对内存的一段空间里的数据的抽象
	//0x001CFDD0

	//暂停
	getchar();

}
*/


//5、指针存储内容(多级指针)
/*
void main(){
	int i = 99;
	//打印i的值
	printf("%d\n",i);
	//打印i的地址
	printf("%p\n", &i);

	//定义一个指针变量
	//int* 是一个int类型的指针变量,可以存储一个int类型的变量地址
	int* p = &i;
	printf("指针变量p的值:%p\n",p);

	//输出指针的地址
	printf("指针变量p的地址:%p", &p);

	//思考:以下代码输出的内容
	//*代表取值  &取地址
	printf("%d\n",*p); 

	//直接赋值
	i = 200;
	printf("变量i的值:%d\n", i);
	//间接赋值(通过指针变量)
	*p = 500;
	printf("指针变量赋值后的i的值:%d\n", i);

	getchar();
}
*/

//6、通过方法改变变量的值
//形参和实参是两个不同的变量,也就意味着重新开辟了内存
//错误写法
/*
void change(int a){
	a = 20;
	printf("形参a变量的地址:%p\n",&a);
}

void main(){
	//实参
	int i = 10;
	printf("实参i变量的地址:%p\n", &i);
	printf("修改前的值:%d\n", i);
	change(i);
	printf("修改后的值:%d\n", i);

	getchar();
}
*/

/*
//正确的写法(指针实现)
void change(int* a){
	//修改值
	//*是取值
	*a = 20;
	printf("形参a变量的地址:%p\n", &a);
}

void main(){
	//实参
	int i = 10;
	printf("实参i变量的地址:%p\n", &i);
	printf("修改前的值:%d\n", i);
	change(&i);
	printf("修改后的值:%d\n", i);

	getchar();
}
*/

//7、模拟一个外挂程序
/*
void main(){
	//实参
	//时间统计
	int time = 60 * 10;
	printf("time变量的地址:%#x\n",&time);
	//注意:外挂程序修改主程序的数据
	while (time > 0)
	{
		time--;
		printf("游戏时间还剩%d秒\n",time);
		Sleep(2000);
	}

	getchar();
}
*/

//注意:在这个地方你新建的文件必须是.c源文件,你不能够新建.cpp源文件,要不然你的注入总是失败
//主程序和外挂程序都是.c源文件


//8、指针为什么要有类型?
void main(){
	//定义int类型的变量
	int i = 10;
	//定义long类型的变量
	double d = 20.344;

	//定义int类型的指针
	int* p = &i;

	//%#x占位符:显示16进制的值
	//打印i变量的地址
	printf("i变量的地址:%#x\n", &i);
	//打印d变量的地址
	printf("d变量的地址:%#x\n", &d);
	//打印指针变量p的地址
	printf("p指针变量的地址:%#x\n", &p);

	printf("p指针变量修改前的值:%d\n", *p);

	//将long类型的变量的地址赋值给了p指针变量
	p = &d;
	printf("修改后p指针变量的地址:%#x\n", &p);

	printf("p指针变量修改后的值:%d\n", *p);

	getchar();

	//总结:因为指针存储的是一个内存地址,然而我们只根据一个地址读取对应的数据,
	//但是你不知道什么时候读取完毕,也就导致了数据丢失,
	//所以我们需要指定指针类型,确定什么时候读取完毕
	//例如:char 2字节 16位   int 4字节 32位
}


整理自课程

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值