C++11笔记:指针与数组

//=====================================================
//Pointers and Dynamic Memory
//指针在迭代器前面出现。他们有什多相同,但是也有很多不同。
//指针其实就是储存内存地址的东西
//=====================================================

int x = 10;
int y = 3;
//建立一个指针来指向x的地址
//两种:
//必须确定准确的数据类

//*号表示提取原值
int *ptr_to_x = &x;
//&就是用来提取内存地址的 
int &ptr = y; //指向对象,再提取地址

//输出:x:10            *:10               &:0xbfb6dcc8           ori:0xbfb6dccc
cout << "x:" << x << " *:" << *ptr_to_x << " &:" << &ptr_to_x << " ori:" << ptr_to_x << endl;
//总结:" *:& "搭配,只有带*号才会输出值,其他两种形式都是地址

//       x:3          &:0xbffa37f8      ori:3
cout << "x:" << x << " &:" << &ptr << " ori:" << ptr << endl;
//总结:原型int &pointer,输出就是&地址和原变量名ptr输出值。没有*ptr!!!(编译不通过)

//x和它的指针都改变了(5),地址依旧不变:
*ptr_to_x = 5; //改变指针的值

//改变ptr指针和y的值:
ptr = 5;

//指针是没有初始值的,C++新加的一个叫nullptr的关键字来建立一个具体的指针,无指向,地址0

//=====================================================
//Array数组-相同数据类的集合(不太常用,因为要设置size才能编译)

//创建一个数组包含10个整型
int numbers[10];
//_类_ _变量名_[数量];
//可以index
numbers[0]//表示数组第一个元素

//赋值:
//实际效果: 1,2,0,0
int number[4] = {1,2};
//效果:1,2

//其实数组是内存的一块连续区域
int number[] = {1,2};
//数组和指针的配合
number[0] == *number; //true,*number可以返回数组的第一元素
number[1] == *(number+1); //true,指针往右移
//数组其实就是内存地址XD
for (int *it = number; it < number + 2; it ++) {
  cout << *it <<" ";
}
//输出:1 2
cout << number << number + 1 << endl;
//输出:两个输出的都是地址

//另一种输出方法(迭代器):
copy (number, number + 2, ostream_iterator<int>(cout, "间隔的字符"));
cout << endl;
//输出:1间隔的字符2间隔的字符

//=====================================================

//const常量和指针的问题:
int x = 3;
int y = 4;
const int *ptr = &x;//常量指针
ptr = &y; //可以更换地址
cout << *ptr << endl; //输出:4
//*ptr = 4; ——但是指针的值是不能直变的。comiler error

//=====================================================

//指针与-> (也就是*item.)
string word = "hello";
string *ptr = &word;
cout << ptr->size() << "," << *ptr << "," << word.size() << endl;
//输出:  5             ,     hello    ,            5
//至于为什么不能*ptr.size(),是因为*ptr直接是值(字符串),不是对象。size()只能对应对象。就例如"stst".size()就不能用。

//=====================================================
//动态内存
//new -分配内存,返回相对应指针
//delete -释放内存
//所以,new多少个,就要delete多少个
//new _类_(初始值)
//new _类_[总数量]
//这两种都会返回一个指针并对应新建的数据
//=====================================================

//delete _指针_ ,删除指针和相应值,释放内存
//delete [] _指针_,删除指针和相应数组array,释放内存

int *number = new int(10);
cout << *number << "," << number << "," << &number << endl;
//输出:10,0x8d11008,0xbf9ef4ac
//可以理解之前的int *ptr_to_x = &x
//左边指针,右边new int是地址&x
delete number;//释放内存

int *arr = new int[10];//创建了连续10个整数的数组
for (int i = 0; i <10; i ++){
  arr[i] = i; //以index的方法赋值
}
//数组10个元素被赋值0-9
cout << arr[1] << "," << *(arr+1) << endl;
//输出:1,1
delete [] arr;//释放数组内存

C++11笔记:指针与数组》上有1条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注