二十九、数数组、指针和字符串:指向数组元素的指针和指针数组(左值概念)
2015-04-27 14:19
381 查看
1、指向指针元素的指针 数组在内存中的存储地址是连续的。很明显指针处理这种运算很方便。 如int a[4]={1,2,3,4}; 数组名a是一个指针常量(不能改变指向的地址),也就不能进行自增或自减等运算。a和&a[0]是等价的。所以用数组名结合简单的算术运算符就可以访问数组元素。如:
*a; //第一个元素 *(a+1); //第二个元素,即i+1个元素 *(a++); // '++' needs l-value 错误 //a表示的是一个地址(常量)而非变量,不能做左值, int* p=a; *(++p); //正确,p为指针变量,可以做左值这里又涉及到一个左值概念,详细说明如下。
什么是左值? C\C+中可以放赋值符号左边的变量,即具有对应的用户可以访问的存储单元,并且可以修改其值的量。左值表示存储在计算机内存中的对象,不是常量或计算结果(这一点需要注意)。 也可以这么理解:左值代表一个内存地址值,通过这个地址可以对内存进行读写操作(主要是写)。这也是为什么左值可以被赋值的原因。
什么是右值? 即放在操作符右边的符号或常量。也是其代表的真实值。简单说就是左值相当于地址值而右值相当于数据值。 我们看以下代码:
int i=0; int*p=&(i++); //错误,提示“&”要求左值 int*p=&(++i); //ok 我们来看下i++,和++i等的函数定义。 //前缀++ int& int::Operator++() { //返回引用,即操作自身 *this+=1; return *this; //取回值 } //后缀++ const int int::Operator++(int) //返回非左型类型,常量int {//函数带参,说明有另外的空间开辟 intoldValue=*this; *this+=1; return oldValue; //返回被取回值 }
结合左值定义我们很容易理解了。 2、指针数组 二维数组在内存中是以行优先的顺序存放的。所以我们可以将二维数组理解为一维指针数组,每个指针元素分别指向二维数组的每一行。 如 int array[2][3]={{1,2,3},{4,5,6}}; 相当于一维指针数组,元素为arr[0],arr[1]。分别代表第一行和第二行的首地址。每一行相当于一个有三个元素的一维数组。
相关文章推荐
- C++编程入门系列之二十九(数组、指针和字符串:指向数组元素的指针和指针数组)
- 鸡啄米:C++编程入门系列之二十九(数组、指针和字符串:指向数组元素的指针和指针数组)
- 数组、指针和字符串:指向数组元素的指针和指针数组
- 使用快速排序算法对字符串数组进行排序(复习指向指针的指针以及指针数组的使用)
- 指针数组、数组指针、指向函数的指针
- 指向数组的指针与指针数组的联系
- C 语言中的左值和右值。以及对比数组名和指针取数组元素的区别。
- 对于数组指针—指针数组;函数指针—函数指针数组,指向函数指针数组的指针,的理解
- 指向字符的指针数组来存储一个字符串列表
- C++基础概念-数组、指针和字符串
- 字符串string 字符数组与指向字符串的指针pchar的区别与联系
- 指针数组,数组指针,存放数组指针的数组,指向存放数组指针数组的指针,函数指针,函数指针数组,指向函数指针数组的指针
- 二维数组 指向二维数组的指针 指针数组 指向二维数组的指针数组
- c语言 - 指向数组的指针与指针数组
- 字符串指针数组,指向指针的指针
- 关于数组指针,指针数组和字符串数组的一些问题
- 理解 指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针
- Unix/Linux C++应用开发-C++基础概念"数组、指针和字符串"
- 指针数组,指向指针的指针,字符串指针数组
- 定义字符指针数组分别指向5个字符串常量,从小到大输出字符串内容