c语言(7.25)

今天学习了指针的运算,野指针和悬空指针,void类型的指针

cs 复制代码
#include <stdio.h>

int main()
{
	//指针跟整数进行加减
	//前提条件:保证内存空间是连续的
	//数组
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	//获取0索引的内存地址
	int* p1 = &arr[0];
	//通过内存地址p获取数据
	printf("%d\n", *p1);
	printf("%d\n", *(p1 + 1));
	//p2-p1间隔了多少步长
	int* p2 = &arr[5];
	printf("%d", p1 - p2);




	return 0;
}
cs 复制代码
#include<stdio.h>
void swap(void* p1, void* p2, int len);
int main()
{
	//viod 类型的指针
	//1,定义两个变量
	int a = 10;
	int b = 20;

	//2.定义两个指针
	int* p1 = &a;
	int* p2 = &b;

	//打印输出
	printf("%d\n", *p1);
	printf("%d\n", *p2);
	//不同类型的指针之间,是不能互相赋值的
	//viod类型的指针可以接收任意类型指针记录的内存地址
	void* p3 = p1;
	void* p4 = p2;
	
	//调用函数
	int c = 100;
	int d = 200;

	swap(&c, &d, 4);
	printf("c=%d,d=%d\n", c, d);
	
	return 0;
}

void swap(void* p1, void* p2, int len)
{
	//把void类型的指针转变成char类型的指针
	//char的字节是1
	char* pc1 = p1;
	char* pc2 = p2;
	char temp = 0;//用来记录pc1
	//以字节为单位,一个字节一个字节地进行交换
	for (int i = 0; i < len; i++)
	{
		temp = *pc1;//用*p1而不是p1,因为这里交换的是这个字节的数据而不是地址
		*pc1 = *pc2;
		*pc2 = temp;
		//交互第二个字节的数据
		pc1++;
		pc2++;

	}

}

冲冲冲

相关推荐
十六年开源服务商2 分钟前
家庭装修公司网站方案策划2026
java·开发语言
Mr_Xuhhh5 分钟前
深入理解Java高级特性:反射、枚举与Lambda表达式实战指南
开发语言·python
XiYang-DING7 分钟前
【Java】TOP-K问题
java·开发语言
枫叶丹49 分钟前
【HarmonyOS 6.0】Navigation组件新特性
开发语言·华为·harmonyos
格林威12 分钟前
GigE Vision 多相机同步终极检查清单(可直接用于项目部署)
开发语言·人工智能·数码相机·机器学习·计算机视觉·视觉检测·工业相机
xinzheng新政16 分钟前
Javascript·深入学习基础知识2
开发语言·javascript·学习
萝卜白菜。42 分钟前
TongWeb8.0 JNDI缓存
开发语言·python·缓存
XMYX-01 小时前
03 - Go 常用类型速查表 + 实战建议(实战向)
开发语言·golang
爱码驱动1 小时前
Java多线程详解(5)
java·开发语言·多线程
@atweiwei1 小时前
用 Rust 构建 LLM 应用的高性能框架
开发语言·后端·ai·rust·langchain·llm