设为首页 加入收藏

TOP

C++基础内容复习(二)
2014-02-08 13:36:58 来源: 作者: 【 】 浏览:250
Tags:基础 内容 复习

 

  对指针进行初始化或者赋值只能使用一下四中类型的值:

  0值常量表达式

  类型匹配的对象的地址

  另一对象末的下一地址

  同类型的另一个有效指针

  把int型变量赋值给指针是非法的,尽管此int型变量的值可能为0.

  std::string s ="1234567";

  std::string*sp =&s;

  int zero =0;

  int *ip=zero;//错误信息 error C2440: 'initializing' : cannot convert from 'int' to 'int *'

  int *ip1 =sp;//错误信息 error C2440: 'initializing' : cannot convert from 'std::string *' to 'int *'

  int *ip2=&s;//错误信息 error C2440: 'initializing' : cannot convert from 'std::string *' to 'int *'

  C++提供了一种特殊的指针 void *,他可以保存任何类型对象的地址

  接上面的例子

  void *ip1 =sp;//正确

  void *ip2=&s;//正确

  不过void *依然不能给赋值为int,即如下依然报错(注意保存信息是void):

  void *ip=zero;//错误信息 error C2440: 'initializing' : cannot convert from 'int' to 'void *'

  void* 指针只支持几种有限的操作:与另一个指针进行比较;向函数传递void* 指针或从函数返回 void* 指针;给另一个 void* 指针赋值。不能使用void*指针操纵它所指向的对象。

  ***注意如下,要cout字符串,必须#include <string>

  std::string s1 ="1234567";

  cout《s1《endl;//输出:1234567

  sp =&s1;

  std::cout《sp《endl;

  *sp="7878";

  std::cout《*sp《endl;//输出:7878

  考虑以下两个程序段。第一个程序段将一个指针赋给另一指针:

  int ival1 = 1024, ival2 = 2048;

  int *pi = &ival1, *pi2 = &ival2;

  pi = pi2; // pi现在指向ival2

  赋值结束后,pi 所指向的 ival 对象值保持不变,赋值操作修改了 pi 指针的值,使其指向另一个不同的对象。现在考虑另一段相似的程序,使用两个引用赋值:

  int &ri = ival1, &ri2 = ival2;

  ri = ri2; // 将ival2的值赋值给ival1

  这个赋值操作修改了 ri 引用的值 ival 对象,而并非引用本身。赋值后,这两个引用还是分别指向原来关联的对象(&ri和&ri2这两个地址的值依旧是原来的地址的值),此时这两个对象的值相等。

  可以通过四个输出看出效果

  int ival1=1204,ival2=2048;

  int &r1=ival1,&r2=ival2;

  std::cout《r1《","《r2《endl;

  std::cout《&r1《","《&r2《endl;

  r1=r2;

  std::cout《r1《","《r2《endl;

  std::cout《&r1《","《&r2《endl;//地址和上面的相同语句输出显示完全一样

  Console::WriteLine(L"Hello World");

  Console::ReadLine();

  C++中,指针和数组密切相关,特别是在表达式中使用数组名时,这个名字会自动转换为指向数组第一个元素的指针。如下:

  int ia[] ={0,2,4,6,8};

  int *ip=ia;

  int *ip1=&ia[0];

  cout《ip《endl;//

  cout《ip1《endl;

  cout《&ia[0]《endl;

  cout《&ia 《endl;

  cout《&ia 《endl;

  cout《&ia 《endl;

  cout《&ia 《endl;

  其中ip、ip1都等于&a[0],也就是数组的第一个元素的地址。

  通常,在指针上加上(或者减去)一个整型数值n后,等效于获得一个新指针,这个新指针指向指针原来指向的元素之后(或者之前)的第n个元素。上面的指针例子用的是int*,可能效果不明显,换成string*来测试一下。

  string ia[] ={"0","2","4","6","8"};

  string *ip=ia;

  string *ip1=&ia[0];

  cout《"ip:"《ip《endl;//

  cout《"ip1:"《ip1《endl;

  cout《"&ia[0]:"《&ia[0]《endl;

  cout《"&ia :"《&ia 《endl;

  cout《"&ia :"《&ia 《endl;

  cout《"&ia :"《&ia 《endl;

  cout《"&ia :"《&ia 《endl;

  ip1=ip+1;

  cout《"ip1+1之后的值:"《ip1《endl;

  Console::WriteLine(L"Hello World");

  Console::ReadLine();

      

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++空类中的默认函数 下一篇C++中的explicit关键字

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Libevent C++ 高并发 (2025-12-26 00:49:30)
·C++ dll 设计接口时 (2025-12-26 00:49:28)
·透彻理解 C 语言指针 (2025-12-26 00:22:52)
·C语言指针详解 (经典 (2025-12-26 00:22:49)
·C 指针 | 菜鸟教程 (2025-12-26 00:22:46)