指针的偏移||通用指针|| 通用函数输入下标想交换位置 || 带参宏传入数据类型

加法或减法
加法偏移到之后的地址,减法偏移到之前的地址。
指针的偏移和指针的取值一样全是模块化操作,对一个指针+1意味着该指针偏移到下一个模块,所以指针的偏移完全取决于该指针的基础数据类型。

void 指针
通用指针,可以指向任意类型的指针
无法直接取值
如果要对一个void
指针取值的时候必须对它强制数据类型转换来确保每一个模块多大
void * 可以接任意的类型的 *
比如:void * vpa = int * pa
void * vpa = int pa
void *vpa = char ** pa
同时,void ** 只能接void *,比如void ** vpa = &vpa(正确) void
vpa = &pa(错误)

通用函数输入下标想交换位置

#include <stdio.h>
#include <string.h>

void exchange(void* arr,int size){
int i = 0,j = 0;
printf(“请输入要交换的两个下标位置:”);
scanf("%d %d",&i,&j);
while(getchar()!=10);
char temp[size];
memcpy(temp,(char )arr+isize,size);//temp = (char*)arr +isize
memcpy((char
)arr+isize,(char)arr+jsize,size);
memcpy((char
)arr+j*size,temp,size);
}

int main(){
int arr[5] = {1,3,5,7,9};
char buf[6] = “hello”;
double darr[5] = {1.9,2.2,3.6,4.5,5.5};
char *str[3] ={“你好”,“中国”,“上海”};
exchange(str,8);
for(int i=0;i<3;i++){
printf("%s “,str[i]);
}
printf(”\n");
//printf(“下标地址是:%p\n”,pa);
return 0;
}

带参宏实现

#include <stdio.h>
#include <string.h>

#define EXCHANGE(arr,type) {int i = 0,j = 0;printf(“请输入要交换的两个下标位置:”);scanf("%d %d",&i,&j);while(getchar()!=10);type temp = 0;temp = ((type )arr)[i]?(type )arr)[i] = ((type)arr)[j]?(type)arr)[j] = temp;}

int main(){
int arr[5] = {1,3,5,7,9};
char buf[6] = “hello”;
double darr[5] = {1.9,2.2,3.6,4.5,5.5};
char *str[3] ={“你好”,“中国”,“上海”};
EXCHANGE(str,char *);
for(int i=0;i<3;i++){
printf("%s “,str[i]);
}
printf(”\n");
//printf(“下标地址是:%p\n”,pa);
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值