`
longhua2003
  • 浏览: 13529 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

C++指针(我所了解的)

阅读更多
不知何原因,最近老是静不下心来学习,也不知什么原因,突然之间,就很想学一下C/C++(我想:"在我很有兴趣去学习一个东西时候,这不是一件坏事吧",不过我还是以Java为主),因为很早之前,在我还没有接触过Java时,那时,我对选择学习Java还是C/C++有一个,有一个什么呢?就是学那个好,那时,Java相当的流行,而C/C++又比较难学,特别是C++中的指针,很多人说,相当的复杂,所以我最终选择自学Java.
   这两天,学了指针,感觉并不是像传说的触不可及(但是它确实有点挠,因为指针吗,经常对一个变量指来指去),我觉得,这要规功于我学习了Java,理解了面向对象的含义,如果你理解了什么是对象,如何运用,并了解了引用传递,我认为学习指针,不是难事(如果我说的不对,不要见笑),因为对象也是存在内存的地址中,而引用传递,始终是指向那个内存地址。

   上我的第一个C++程序(在这里要先感谢贺老师无私奉献的知识)
#include <iostream>
using namespace std;

int mainyw();
int main()
{
cout  << "指针运算 "  << endl;
int a, b;
int *pointer_1, *pointer_2;  //指向整形变量的指针变量
pointer_1 = &a;  //取a变量的地址
pointer_2 = &b;
*pointer_1 = 100;
*pointer_2 = 10;
cout << a << " " << b << endl;
cout << *pointer_1 << " " << *pointer_2 << endl;
        mainyw();
return 0;
}

int mainyw()
{
int a, b, *p1, *p2, *p;
cin >> a >> b;
p1 = &a;
p2 = &b;
if (a<b)
{
p = p1; p1 = p2; p2 = p;
}
cout << "a=" << a << " b=" << b << endl;
cout << "max=" << *p1 << " min=" << *p2 << endl;
return 0;
}

在mian方法中pointer_1 取了a变量的地址,然后,pointer_1指针赋值为100,这时pointer_1指向的地址就是a变量指向的地址,所以,
输出的结果a=100,b=10, pointer_1 =100,pointer_2 =10.



尽管ab没有再赋值,但数据发生变化,原因就地址的作用,所以如果a修改为90,指针变量pointer_1 也是90
#include <iostream>
using namespace std;

int main()
{
cout  << "指针运算 "  << endl;
int a, b;
int *pointer_1, *pointer_2;  //指向整形变量的指针变量
pointer_1 = &a;  //取a变量的地址
pointer_2 = &b;
*pointer_1 = 100;
*pointer_2 = 10;
cout << a << " " << b << endl;
cout << *pointer_1 << " " << *pointer_2 << endl;

cout  << "修改a变量 "  << endl;
a=90;
cout << a << " " << b << endl;
cout << *pointer_1 << " " << *pointer_2 << endl;
return 0;
}




我们知道,一个函数最多就是返回一个值(数,数组或集合,对象),而现在的myswap函数可以改变传入的两个数的内存地址,
把两个数的内存地址互换,就是a变成b,b变成a,这是不是相当于返回了多个数的效果呢?
#include <iostream>
using namespace std;

void myswap(int *p1, int *p2)
{
int t;
t=*p1;
*p1=*p2;  //这里把地址进行互换
*p2=t;
}
int main()
{
int *point1,*point2,a,b;
cout  << "输入两个数,比较大小 "  << endl;
cin>>a>>b;
cout<<"a="<<a<<",b="<<b<<endl;
point1=&a;
point2=&b;
if (a<b){
             myswap(point1, point2);
}
cout<<"a="<<a<<",b="<<b<<endl;
    cout<<*point1<<","<<*point2<<endl;
}




我最初输入的是2,5,a=2,b=5;myswap函数中把两个数的地址进行互换,这时,指针发生了变化,假如a的地址是x000xf,b的地址是x004xf,
point1 指针原来指向是地址x000xf,现在,是指向了x004xf,而point2指向了x000xf,相应的a.b的值也发生了变化,因为地址改变了,所以,指针传递给myswap的形参,就是引用传递。

可见,指针也是一种多少奇妙的事物,它会让你编程世界多一份意外的风景(如果你运用好的话)


  • 大小: 7 KB
  • 大小: 8.6 KB
  • 大小: 8.5 KB
分享到:
评论

相关推荐

    c_c++指针详解 指针详解

    c_c++指针详解 c_c++指针详解 希望对大家理解指针有帮助

    C++指针经典应用

    C++指针的几个经典应用,帮助你深入了解C++指针的用法

    C++指针及句柄

    C++指针及句柄,深入理解 指针的奥秘 .

    C++指针经典教程(指针专讲)

    对于初学者来讲指针这个东西很烦人,理解起来并不难,但是在实际开发中该如何灵活的使用指针却是个难点。特分享《C/C++指针经验总结——经典教程》,这个教程让你更快更透彻的知晓C++指针的奥秘:)

    C++指针与引用的区别

    详细分析了指针与引用的区别,适合初学者了解

    C++指针精髓

    C++指针精髓,有助于初学者快速了解C++指针的本质以及用法。

    c++指针类型

    c++指针的使用,和简单介绍,充分了解如何使用c++指针

    C++指针详解

    关于C++中指针的详细解释,写的很好有助于理解

    C++双指针示例

    C++双指针的展示,想进阶C++的可以看一下,如果看懂了对指针的理解会有一个新的高度

    c++智能指针最全知识点即面试题目总结

    对于需要面试C++相关岗位的文章,看完这篇文章,如果面试官再问你智能指针,我敢肯定,你一定可以侃侃而谈了~智能指针的面试题,只看这一篇就够了!相信看完这篇文章,妈妈再也不用担心面试官考我智能指针的问题啦...

    C++指针经验总结

    C++指针的经验总结,让你轻松了解C++指针

    C++指针与动态分配 内存new关键字专题

    指针是C或C++所特有的,因此应熟练掌握指针的使用,本文集中介绍C或C++中的各种指针,包括指针数组,数组指针,常量指针,指向指针的指针,尤其是对二维数组和指针进行了详细精辟的解释,在读完本文的二维数组和指针...

    自己对c++指针的理解

    自己对c++指针的理解,比较的深入,结合一些实例, 是个不错的理解c++的教材

    C++ this指针的理解

    比较好的this讲解 方便初学者学习 可以更好理解 比较易懂

    C++指针介绍及使用说明

    通过本文的学习,读者不仅能够全面理解C++指针的基础知识,还能够掌握指针在实际编程中的应用技巧。文章不仅适合初学者入门学习,也能够帮助有一定基础的程序员深化对指针的理解,提高编程水平和代码质量。无论是...

    C++指针学习的所需资料

    有关于指针学习所需要的资料经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的 C/C++声明:我们将从每天都能碰到的较简单的声明...

    C++指针专题(Version 1.0)

    关于C++语言中指针的一个专题介绍,对C++初学者理解指针有一定帮助~~~~

    C++指针与指针数组的两个实例 可运行

    自己写的两个例程 能够帮助大家很好的理解指针的含义和具体用法

Global site tag (gtag.js) - Google Analytics