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.

142050_EcX7_815302.jpg


尽管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;

}

142113_M93t_815302.jpg


我们知道,一个函数最多就是返回一个值(数,数组或集合,对象),而现在的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;

}

142136_LyEC_815302.jpg

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

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

转载于:https://my.oschina.net/u/815302/blog/479298

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值