一.
#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;
}
五.指针与对象
- #include <iostream>
- using namespace std;
- class Test
- {
- public:
- Test();
- ~Test();
- void Do(char* c);
- };
- Test::Test()
- {
- cout << "Test对象被创建。" << endl;
- }
- Test::~Test()
- {
- cout << "Test对象被销毁。" << endl;
- }
- void Test::Do(char* c)
- {
- cout << "在" << c << "中调用了Do方法。" << endl;
- }
- void Func1()
- {
- Test t;
- t.Do("Func1");
- /*
- 当函数执行完了,t的生命周期结束,发生析构。
- */
- }
- void Func2()
- {
- Test* pt = new Test;
- pt -> Do("Func2");
- /*
- 用指针创建的对象,就算指针变量的生命周期结束,但内存中的对象没有被销毁。
- 因此,析构函数没有被调用。
- */
- }
- int main()
- {
- Func1();
- cout << "---------------------" << endl;
- Func2();
- getchar();
- return 0;
- }