C++学习札记20140310

引用必须被初始化,一旦初始化完成引用将和它的初始值对象一直绑定在一起,无法令引用重新绑定到另外一个对象。

引用并非对象,只是对存在的的对象所起的另外一个名字

引用本身不是一个对象,所以不能定义指向引用的指针(指针指向的必须是对象)

指针是对象,所以存在对指针的引用

const指针必须初始化,也就是常量指针必须初始化

引用只能绑定在对象上,而不能与字面值绑定在一起

试图拷贝或以其它方式访问无效指针的值都将引发错误,编译器并不负责检查此类错误,这一点和试图使用未经初始化的变量是一样的。访问无效指针的后果无法预计!!!,因此程序员必须清楚任意给定的指针是否有效!!!!

数组的元素应为对象,因此不存在引用的数组

又因为数组本身就是对象,所以允许定义数组的指针及数组的引用

int i = 42;
	int &ip = i;
	int *p;
	int *&r = p;
	r = &i;
	cout << *r << endl;
	cout << *p << endl;
	cout << ip << endl;
输出都是42,仔细理解

string对象会自动忽略开头的空白

getline函数会保留输入字符串中的空白符,它的结束标志是换行符(换行符也被读入了),getline(cin, s),然后把读入的string对象s存取,但是不存换行符

比较以下两个程序

//按个数输出单词,每个单词输出后就换行,读取位置数量的string对象
int main()
{
	string word;
	while(cin >> word)
	{
		cout << word << endl;
	}
	return 0;
}
//按行输出,使用getline读取一整行
int main(void)
{
	string word;
	while(getline(cin, word))	//每次读取一整行,直到到达文件尾或换行符才结束
	{
		cout << word << endl; 
	}
	return 0;
}

默认初始化的一些注意的问题

默认初始化的默认值到底是什么由变量类型决定。同时定义变量的位置也会对此有影响!

如果是内置类型的变量未被显示初始化,它的值由定义的位置决定,定义于任何函数体之外的变量被初始化为0.

如果定义在函数体内部的内置类型没有初始化,它的值是未定义的,不能拷贝或访问此类值

//访问数组的不同办法
#include <iostream>
#include <string>
#include <vector>
#include <cctype>

using namespace std;

int main()
{
	int iB[10];
	int iA[10];
	vector<int> iVec;
	for (int i = 0; i < 10; ++i)
	{
		iA[i] = i;
		cout << iA[i] << ' ';
	}
	cout << endl;
	for (int j = 0; j < 10; ++j)
	{
		iB[j] =iA[j];
		cout << iB[j] << ' ';
	}
	cout << endl;
	for (int j = 0; j < 10; ++j)
	{
		iVec.push_back(iA[j]);
	}
	for (vector<int>::size_type i = 0; i != iVec.size(); ++i)
	{
		cout << iVec[i] << ' ';
	}
	cout << endl;
	//不需要改变迭代器指向的内容,所以声明成常量迭代器
	for (vector<int>::const_iterator iter = iVec.cbegin(); iter != iVec.cend(); ++iter)
	{
		cout << *iter << ' ';
	}
	cout << endl;
	return 0;
}

使用数组的时候编译器一般会把它转换成指针。

取地址符可以用于任何对象

数组还有一个特性:在很多用到数组名字的地方,编译器都会自动地将其替换为一个指向数组首元素的指针

string nums[] = {"one", "two", "three"};

string *sp = nums; //等于 *sp = &nums[0]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值