c++指针总结

一.

#include<iostream>
using namespace std;
int main()
{
    int *p=new int(4);
    cout<<p<<endl;
    cout<<*p<<endl;
    return 0;
}


因为它是int*,是指向int的指针,所以指针知道,找到首地址后,我只关注从首地址开始,连续的4个字节,后面的我不管了,因为我只知道int有四个字节

二.创建动态数组

#include<iostream>
using namespace std;
int main()
{
    int *p=new int[2];
    p[0]=3;
    p[1]=4;
    cout<<*p<<" "<<p<<endl;
    cout<<*(++p)<<" "<<p<<endl;
    delete p;

    return 0;
}


三.取地址符号&

#include<iostream>
using namespace std;
int main()
{
    int a=50;
    int *p=&a;
    cout<<p<<"   "<<*p<<endl;
    return 0;
}


我们不能直接对指针变量赋值,要把变量的地址传给指针,就要用取地址符&

四.参数传递问题

1.传值

#include<iostream>
using namespace std;
void fun(int x);
int main()
{
    int a=50;
    fun(a);
    cout<<a<<endl;
    return 0;
}
void fun(int x)
{
    x+=100;
}


变量a和fn函数的参数x的地址是不一样的,这意味着什么呢?这说明,变量a的值虽然传给了参数x,但实际上是声明了一个新变量x,而x的值为50罢了,最后加上100,x的中的值是150,但a的值没有变,因为在函数内被+100的根本不是变量a,而是变量x(参数)。

2.

#include<iostream>
using namespace std;
void fun(int *x);//形参是指针类型,也就是内存地址
int main()
{
    int a=50;
    fun(&a);      //实参必须也是指针类型  
    cout<<a<<endl;
    return 0;
}
void fun(int *x)
{
    *x+=100;
}


3.

#include<iostream>
using namespace std;
void fun(int &x);
int main()
{
    int a=50;
    fun(a);
    cout<<a<<endl;
    return 0;
}
void fun(int &x)
{
    x+=100;
}


五.指针与对象

  1. #include <iostream>
  2. using namespace std;
  3. class Test
  4. {
  5. public:
  6. Test();
  7. ~Test();
  8. void Do(char* c);
  9. };
  10. Test::Test()
  11. {
  12. cout << "Test对象被创建。" << endl;
  13. }
  14. Test::~Test()
  15. {
  16. cout << "Test对象被销毁。" << endl;
  17. }
  18. void Test::Do(char* c)
  19. {
  20. cout << "在" << c << "中调用了Do方法。" << endl;
  21. }
  22. void Func1()
  23. {
  24. Test t;
  25. t.Do("Func1");
  26. /*
  27. 当函数执行完了,t的生命周期结束,发生析构。
  28. */
  29. }
  30. void Func2()
  31. {
  32. Test* pt = new Test;
  33. pt -> Do("Func2");
  34. /*
  35. 用指针创建的对象,就算指针变量的生命周期结束,但内存中的对象没有被销毁。
  36. 因此,析构函数没有被调用。
  37. */
  38. }
  39. int main()
  40. {
  41. Func1();
  42. cout << "---------------------" << endl;
  43. Func2();
  44. getchar();
  45. return 0;
  46. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值