指针初探

2 篇文章 0 订阅

放下C和C++很久,再次拿起来最值得一看的当然是指针,复习一遍的速度虽然是很快的,但长时间总会忘记,这里就简要的记录下。C和C++两者在指针上大体是相似的,这里就是用C++为例来写一下,其中提到一些指针的基本用法和要注意的小细节。

//
//  pointer.cpp
//  FirstMacOSCpp
//
//  Created by NicolasYam on 2017/11/2.
//  Copyright © 2017年 NicolasYam. All rights reserved.
//

#include <iostream>

int main(int argc, const char * argv[]) {
    using namespace std;

    // 赋值变量地址并显示
    int num = 1024;
    int* addr = &num;
    cout << "num addr = " << addr << endl;

    // 通过指针修改值本身
    *addr += 1;
    cout << " *addr = " << *addr << endl;
    cout << "num = " << num <<endl;

    /*
     在不使用new关键字的情况下不要用以下方法初始化指针
     long* addr;
     *addr = 23333;
     此时addr声明时是未知的,赋值后会覆盖原有在addr上的数据
     而new则不同,其会找到可以分配的内存进行分配
     */

    //使用new来分配内存, delete释放内存
    int* pt = new int;
    *pt = 1001;
    double* pd = new double;
    *pd = 65535.0;

    cout << "addr " << pt
         << " is " << *pt << endl;
    cout << "sizeOf *pt = " << sizeof(*pt) << endl;
    cout << "addr " << pd
         << " is " << *pd << endl;
    cout << "sizeOf *pd = " << sizeof(*pd) << endl;
    delete pt;
    delete pd;

    //使用new和指针创建动态数组
    int* arr = new int[10];
    arr[0] = 101;
    arr[2] = 103;
    cout << "arr[0] = " << arr[0]
         << " arr[1] = " << arr[1]<<endl;
    arr += 1;
    cout << "arr[0] = " << arr[0] <<endl;
    arr -= 1;
    delete [] arr;

    //指针算术
    //C++中对于数组名和指针的表示如arr[i],都将转换为*(arr + i)
    //指针加1,增加的值等于指向类型所占字节数
    double wage[3] = {10000.0, 20000.0, 30000.0};
    double* pw = wage;
    cout << "wage = " << wage
         << " pw = " << pw << endl;
    cout << "*(pw + 1) = " << *(pw + 1) << endl;
    pw += 1;
    cout << "pw + 1 = " << pw << endl;

    //sizeof对于数组和指针的区别
    //对于数组的到的事数组的长度,指针则是指针的长度
    cout << "sizeof wage = " << sizeof(wage)
         << " sizeof pw = " << sizeof(pw) << endl;

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值