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和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null

windows和Linux安装Jmeter与简单使用方式

《windows和Linux安装Jmeter与简单使用方式》:本文主要介绍windows和Linux安装Jmeter与简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows和linux安装Jmeter与简单使用一、下载安装包二、JDK安装1.windows设

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时