当前位置:网站首页>从交换两数据值看指针的使用(c语言实现)
从交换两数据值看指针的使用(c语言实现)
2022-08-10 05:36:00 【随便写写。】
一、交换两数据值的错误做法
错误一:
void swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
int main()
{
int x=1;
int y=2;
swap(x,y);
}
错误原因:
主函数调用swap函数时,swap函数会分配a,b两个空间来存储主函数的参数,swap函数执行完后
swap中分配的栈空间中a,b两个值交换了。但是当swap函数执行完返回主函数时,a,b两个变量被释放,而主函数中的x,y并么有改变。
错误二:
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main()
{
int x=1;
int y=2;
swap(&x,&y);
}
错误原因:
转函数调用swap函数时,swap函数分配两个指针变量a,b来存储x,y的地址,swap函数运行后,交换的是两个指针变量的地址,a指向y,b指向x,在swap函数返回主函数后,a,b两个指针变量被释放,主函数的x,y仍然没有被改变。
二、交换两变量值得正确做法
交换常量值:
void swap(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int x=1;
int y=2;
swap(&x,&y);
}
主函数调用swap函数时,swap函数分配两个指针变量a,b分别指向x,y,swap函数通过*p直接访问指针所指向的值,并将他们交换,当swap函数返回主函数后a,b两个指针变量被释放,但是他们指向的x,y被改变了。
交换指针变量值:
void swap(int** c, int** d)
{
int* temp = *c;
*c = *d;
*d = temp;
}
int main()
{
int x = 1;
int y = 2;
int* a = &x;
int* b = &y;
swap(&a, &b);
}
主函数调用swap函数时,swap函数中分配两个指针变量c,d分别指向主函数中的指针变量a,b,执行swap函数时,通过c,d两个指针变量来操作a,b两个指针变量,达到交换两个指针变量的目的。只会改变指针变量a,b中存储的地址,不会改变常量x,y的值。
void swap(int* c, int* d)
{
int temp = *c;
*c = *d;
*d = temp;
}
int main()
{
int x = 1;
int y = 2;
int* a = &x;
int* b = &y;
swap(a, b);
}

主函数调用swap函数时,分配两个指针变量c,d来存储指针变量a,b的值,也就是c,d直接指向变量值,通过*P来交换变量值,所以最后变量x,y会改变,而a,b中存储的地址不会改变。
总结
子函数要对主函数的变量进行操作,子函数中的传入参数要为主函数变量的地址,如主函数为普通变量,则传入参数要为指针,如主函数为指针变量,传入参数要为二级指针,依次内推。然后子函数中通过该指针来改变主函数的变量的值,不要再子函数中直接操作指针,而要通过*p来操作指向的变量。最后一种情况与交换常量值相似,都是改变常量的值,而不会改变主函数指向常量的指针。
边栏推荐
猜你喜欢

STM32单片机OLED经典2048游戏单片机小游戏

LeetCode 162. Finding Peaks (Moderate)

从零开始构建Google Protocol Buffer / protobuf 的helloworld工程(超级详细)

pytorch-10. Convolutional Neural Networks (homework)

LeetCode refers to the offer 21. Adjust the order of the array so that the odd numbers are in front of the even numbers (simple)

详解样条曲线(上)(包含贝塞尔曲线)

Convolutional Neural Network (CNN) for mnist handwritten digit recognition

pytorch-06.逻辑斯蒂回归

STM32F407ZG PWM

R语言聚类分析——代码解析
随机推荐
LeetCode 面试题17.14 最小k个数(中等)
R语言聚类分析——代码解析
pytorch-10. Convolutional Neural Networks
二维卷积定理的验证(下,cv2.filter2D())
STM32单片机RGB红蓝调光植物补光系统红光蓝光PWM调色调节亮度
pytorch-06. Logistic regression
51单片机手动自动智能窗户窗帘控制系统手动自动定时
pytorch-11. Convolutional Neural Network (Advanced)
Exploratory Data Analysis EDA
LeetCode 剑指offer 10-I.斐波那契数列(简单)
深度学习TensorFlow入门环境配置
pytorch-10.卷积神经网络
51单片机营养液自动配置搅拌系统TDS浓度采集自动加水加营养液
自定义View的流程总结学习
Convolutional Neural Network (CNN) for mnist handwritten digit recognition
pytorch-07.处理多维特征的输入
开源游戏服务器框架NoahGameFrame(NF)服务器端环境搭建(二)
序列化、编码、requests库json和data参数
Common class String overview
电路建模的要点