C++指针(一)

指针是一个变量,其存储的是值的地址,而不是值本身,如果variable是一个变量,则&variable就是它的地址。

#include <iostream>
int main() {
    using namespace std;
    int variable = 6;
    cout << "variable value = " << variable << "\n";
    cout << "variable address = " << &variable << "\n";
    return 0;
}

输出为:

variable value = 6

variable address = (随机的地址)

声明和初始化指针

#include <iostream>
int main() {
    using namespace std;
    int variable = 6;  //声明变量
    int* p_variable;   //声明指针
    p_variable = &variable;  //指针指向variable

    cout << "Value : variable = " << variable;
    cout << ",*p_variable = " << *p_variable << "\n";

    cout << "Addresses : &variable = " << &variable;
    cout << ",p_variable" << p_variable << endl;

    *p_variable = *p_variable + 1;
    cout << "Now variable = " << variable << endl;
system(
"pause"); return 0; }

输出为:

Value : variable = 6,*p_variable = 6
Addresses : &variable = 010FF8B0,p_variable010FF8B0
Now variable = 7

指针在使用的时候一定要初始化,指针不被初始化的时候,它有可能是任何值。例如:

long *a;
*a = 2;

a确实是一个指针,但是它指向哪里呢?上述代码并没有将地址赋给a,那么2将被放在哪里我们也不知道,这将导致程序出现难以追踪的bug,我们可以这样初始化指针a。

int number = 2;
int * a = &number;

使用new分配内存,delete释放内存。

在C语言中使用库函数malloc()来分配内存,在C++中任然可以这样用,但C++提供更好的方法——new运算符。

#include <iostream>
int main() {
    using namespace std;
    int *p = new int;     //申请内存
    *p = 100;

    double *pt = new double;
    *pt = 100.00;

    cout << "*p value = " << *p;
    cout << ",p address = " << p << endl;
    cout << sizeof(p) << "," << sizeof(pt) << endl;
    cout << sizeof(*p) << "," << sizeof(*pt) << endl;

    delete p;             //释放内存
    delete pt;
    system("pause");
    return 0;
}

输出为:

*p value = 100,p address = 012EB2D0
4,4
4,8

 使用new创建动态数组

例如创建创建一个包含10个元素的int数组:

int * p = new int[10];

使用完动态数组后应使用delete [] p来释放内存。

Tips:

1.不要使用delete来释放不是new分配的内存。

2.对空指针应用delete是安全的。

3.不要使用delete释放同一个内存卡两次。

4.使用new [] 为数组分配内存,应使用delete [] 来释放。

猜你喜欢

转载自www.cnblogs.com/lyj0704/p/11195484.html