放下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 = #
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;
}