C语言 void 函数学习

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

#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;

}

#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++;

 

 }

 

}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值