4.关于指针的两个看似简单实则意义深远的题

2024-03-31 22:32

本文主要是介绍4.关于指针的两个看似简单实则意义深远的题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0.指针是无私的,它并不关系自己,只关心指向的那个变量 。

int a = 1 ;

int *p1 = &a ;

*p1 += 1;

cout<<a<<*p1<<endl;

输出结果为,a = 2,*p1 = 2;

结论:指针是无私的,它并不关心自己,只关心指向的那个变量,,说白了,,就是间接引用那个变量,指针没有值,只是地址。

对*指针的操作就是对指向变量的操作!!!

1.void main()

{
 int a ,b ;
 int *p,*p1,*p2;
 p2 = &b;
 p1 = &a;
 cout<<"输入两个值"<<endl;
 cin>>a>>b;
 if (a<b)
 {
    p = p1;
    p1 = p2 ;
    p2 = p;

 }
 cout<<"a = ? p1 = ? *p1 = ?"<<a<<" "<<p1<<" "<<*p1<<endl;
 cout<<"b = ? p2 = ? *p2 = ?"<<b<<" "<<p2<<" "<<*p2<<endl;


}

结果:假如输入a = 1,b = 2。

输出结果为 a = 1 ,p1 = 611100 ,*p1 = 2;

                     b = 2 ,p2 = 610004,*p2 = 1;


 if (a<b)   --- a.b并未交换,,交换的只是p1,p2的地址。交换的只是p1和p2的指向,a,b值并未改变!!!!!
 {
    p = p1;
    p1 = p2 ;

    p2 = p;



2.不改变输入的三个数(利用指针),将三个数排序,按*p1最大,*p2 ,*p3的顺序排出。。。利用指针!!!!!/

利用交换指针的指向,而不改变原来的变量值!!


int a,b,c;
int *p, *p1=&a, *p2=&b, *p3=&c;
cout<<"输入a,b,c"<<endl;
cin>>a>>b>>c;
if (*p1<*p2)//不要写成a<b,或者b<c之类的。因为后面的第二次比较第二次比较中,要求*p1是大的那个,,这时候*p1具体是a,还是b是未知的。
    p = p1;
    p1 = p2;
    p2 = p;    //交换指针的指向,不改变原来的变量值!!
}//先比较出两个之中较大的那个
if (*p1 < *p3)
{
    p = p1;
    p1 = p3;
    p3 = p;
}//如果*p3最大,,那么执行完第二次比较之后,p3指向第一次比较后较大的那个结果。接下来的比较就应该,将p3和p2指向互换,也就是下面的比较执行

//如果,*p3比第一次比较后的*p1小,那么p2和p3比较,互换。

if (*p2 < *p3)//比较条件必须是*p2 < *p3,,因为要求是*p2是第二大的那个
{
    p = p2;
    p2 = p3;
    p3 = p ;
}
cout<<*p1<<" "<<*p2<<" "<<*p3<<endl;
}


3.

int *p, *p1=&a, *p2=&b,

if (*p1<*p2)
{
    *p = *p1;///严重注意这里!!:p并没用被初始化地址,,它的地址这时候是任意的,当你把*p1(a变量)赋给未知地址的指针时候,,这时候系统会报错!!
    *p1 = *p2;
    *p2 = *p;

4.

int p, *p1=&a, *p2=&b,

if (*p1<*p2)
{
    p = *p1;//这时候就没错了,因为p声明的是一个变量,而不是指针!
    *p1 = *p2;
    *p2 =p;


5.注意;使用指针对数的排序是非常广泛的!!!!

6.输入两个数,利用指针函数对两个数进行由大到小的排序。

void swap(int *p1,int *p2)//这里的形参中,一定要加*号,用来说明函数的形参是指针变量

{

int temp;

temp = *p1;

*p1 = *p2 ;

*p2 = *p1 ;

cout<<*p1<<*p2<<endl;

}

void main()

{

cout<<"输入两个数“<<endl;

int a,b;

cin>>a>>b;

int *point = &a ,*point2 = &b;

if(a<b)

{

swap(ponit1,point2)//注意:这里不用在point2前面加*号!!,这里已经是指针变量了,,再加就错了!

cout<<a<<b<<endl;

cout<<*point1<<*point2<<endl;


}

结果:假如输入的是1和2;

那么结果为

输出a = 2,b = 1;

a = 2,b = 1

a = 2,b = 1;

可以看出,,利用指针的函数,,其值传递方式是前后一致的,函数里和主函数中一起改,因为指针引用的就是主函数的变量,是同一个变量,并不是按值传递方式。

这就叫利用指针传递方式。



这篇关于4.关于指针的两个看似简单实则意义深远的题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/865517

相关文章

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

使用PyQt5编写一个简单的取色器

《使用PyQt5编写一个简单的取色器》:本文主要介绍PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16进制颜色编码,一款跟随鼠标刷新图像的RGB和16... 目录取色器1取色器2PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

锐捷和腾达哪个好? 两个品牌路由器对比分析

《锐捷和腾达哪个好?两个品牌路由器对比分析》在选择路由器时,Tenda和锐捷都是备受关注的品牌,各自有独特的产品特点和市场定位,选择哪个品牌的路由器更合适,实际上取决于你的具体需求和使用场景,我们从... 在选购路由器时,锐捷和腾达都是市场上备受关注的品牌,但它们的定位和特点却有所不同。锐捷更偏向企业级和专

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h