标签:num1 num2 int void 存放 数组 内存地址 指针
//指针:类型跟存放变量的类型一致
定义格式:数据类型 * 变量名;
static关键字可以防止内存被释放
禁止使用野指针和悬空指针
特殊指针:void* p;空类型指针,可以存放任何类型指针,但是不能进行操作
//指针高级应用:以字节为单位,交换两个变量的值
#include <stdio.h>
void Swap(void* p1,void* p2,int len);
int main(){
//指针高级应用,交换两个数值:按字节交换两个变量值,可适用各种数据类型数据交换,使函数具有通用性
long long a = 2147483647;
long long b = 21474836;
void* p1 = &a;
void* p2 = &b;
printf("交换前:a = %d,b = %d\n",a,b);
Swap(p1,p2,sizeof(a));
printf("交换后:a = %d,b = %d",a,b);
}
void Swap(void* p1,void* p2,int len){
char* pc1 = p1;//用char指针按字节交换两个变量数值
char* pc2 = p2;//char指针是1个字节
int i;
for(i = 0;i < len;i++){
char temp = *pc1;
*pc1 = *pc2;
*pc2 = temp;
pc1++;
pc2++;
}
}
二级指针,多级指针:
二级指针:指向指针的指针,多级指针同理,类型跟指向空间中存放数据类型相同
//数组和指针:
数组指针:指向数组的指针,使用数组名和数组首地址的步长不同,前者是数据类型字节数,后者是数据类型 * len
//二维数组:数据类型 数组名[行数][列数];矩阵
数组指针,指针数组
数组指针:指向数组的指针
指针数组:存放指针的数组
两者步长不同
//函数指针:指向函数的指针,嵌入式接口用函数指针调用
//定义格式:数据类型 (*指针变量名)(形参1数据类型,形参2数据类型) = 函数名;
//函数指针,函数指针数组练习:通过函数指针数组调用函数
#include <stdio.h>
int Sum(int num1,int num2);
int Abstruct(int num1,int num2);
int Multiply(int num1,int num2);
int Divide(int num1,int num2);
int main(){
int num1,num2;
printf("请输入两个要运算的数值:");
scanf("%d%d",&num1,&num2);
int (*arr[4])(int,int) = {Sum,Abstruct,Multiply,Divide};
int choose;
printf("请输入运算编号(1~4):");
scanf("%d",&choose);
int res = (arr[choose-1])(num1,num2);
printf("%d",res);
}
int Sum(int num1,int num2){
return num1 + num2;
}
int Abstruct(int num1,int num2){
return num1 - num2;
}
int Multiply(int num1,int num2){
return num1 * num2;
}
int Divide(int num1,int num2){
return num1 / num2;
}
标签:num1,
num2,
int,
void,
存放,
数组,
内存地址,
指针
From: https://www.cnblogs.com/izxw/p/18362261