【C++】指针与new的使用

指针

文章目录

  • 指针
    • 普通指针
      • 基本使用
      • new与delete
      • 注意事项

普通指针

基本使用

    //指针p指向t
    int t = 123;
    int*p = &t;
    //C++11以上可用auto
    auto pp = &t;

指针的大小为固定

    int x = 5;
    double y = 100;
    int *px = &x;
    double *py = &y;
    char z = 'z';
    char *pz = &z;
    cout << sizeof(px) << endl;
    cout << sizeof(py) << endl;
    cout << sizeof(pz) << endl;
// 均为8

因此将指针自增加时会根据指向的内容进行自增

    int a[5] = {1,2,3,4,5};
    int *p = a;
    for(int i = 0 ; i < 5 ; i ++ , p ++){
        cout << *p << " ";
    }
    //1 2 3 4 5

new与delete

new用于动态申请存储空间,它比malloc更好
delete用于释放new申请的空间

  • new与delete基本使用
    int *x = new int(10);//申请了一个初值为10的整型数据
    int *y = new int;
    cout << *x << " " << *y << endl;
    delete(x); delete(y);
  • 数组使用
    int *arr = new int[5];
    for(int i = 0 ; i < 5 ; i ++)cout << arr[i] << " ";
    delete []arr;//注意数组的delete
  • 对类使用
class A{
public:
    A(int t){
        this -> x = t;
    }
    int getx(){
        return this->x;
    }   
private:
    int x;

};


int main() {
    A* ptr = new A(5);
    cout << ptr->getx() << endl;
}

注意事项

1.new与delete必须成对使用,delete会释放指针指向的内存但不会删除指针本身

    int* ptr = new int(5);
    delete ptr;
    ptr = new int(6);
    cout << *ptr << endl;
    delete ptr;
    //6

2.不要尝试释放已经释放的内存,delete只能释放new申请的内存

    int* ptr = new int(5);
    delete ptr;
    delete ptr; //不行
    int x = 6;
    int* p = &x;
    delete p; //不行

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
回答: 在C语言中,可以使用new关键字来动态地分配指针数组的内存空间。例如,可以使用以下代码来创建一个动态指针数组并初始化其值: ``` int* p = new int = 1; p = 2; p = 3; ``` 在这个例子中,我们使用new关键字创建了一个包含3个整数的动态指针数组,然后分别给数组元素赋值为1、2和3。注意,这里的p是一个指针,指向了整数数组的首地址。在使用完数组后,我们应该使用delete[]来释放内存空间,以防止内存泄漏。 需要注意的是,以上的示例是C++语言的写法。在C语言中,使用动态指针数组的方法可能会有所不同。一种常见的方法是使用malloc函数来分配内存空间,例如: ``` int* p = (int*)malloc(3 * sizeof(int)); p = 1; p = 2; p = 3; ``` 在这个例子中,我们使用malloc函数来分配了包含3个整数的内存空间,并将返回的指针强制转换为int类型的指针。同样,在使用完数组后,我们应该使用free函数来释放内存空间,以防止内存泄漏。 总而言之,C语言中可以使用malloc函数动态分配指针数组的内存空间,而C++语言可以使用new关键字来实现相同的功能。注意在使用完动态分配的数组后,应该使用相应的释放内存的函数来避免内存泄漏。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [C++new的用法(涉及指针)](https://blog.csdn.net/holdon_yes/article/details/128670543)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [C++ 指针(一)](https://blog.csdn.net/weixin_45610907/article/details/127452356)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值