C++指针数组.数组指针.数组名及二维数组技巧汇总

2015-03-03  来源:本站原创  分类:C 语言  人气:6 

这篇文章主要介绍了C++指针数组、数组指针、数组名及二维数组技巧汇总,对于深入理解C++数组与指针来说非常重要,需要的朋友可以参考下

本文较为详细的分析了关于理解C++指针数组,数组指针,数组名,二维数组的一些技巧。是比较重要的概念,相信对于大家的C++程序设计有一定的帮助作用。

一、关于数组名

假设有数组:

int a[3] = {1, 2, 3}

1.数组名代表数组第一个元素的地址,注意,不是数组地址(虽然值相等),是数组第一个元素地址,a 等同于 &a[0];

a+1是第二个元素的地址。比第一个元素地址a(或者&a[0])超出了一个整型指针的大小,在这里是4个字节(byte)

cout << a << endl;//会输出数组第一个元素地址。

2.取址符号&.

&a是数组的地址,注意是数组的地址,表示数组这个整体的地址。不是数组第一个元素的地址(虽然他们的值相同)

&a+1比数组的地址&a超出了一个数组的地址大小,在这里是3*4个字节

int * p = &a;这条语句是不成立的。左边指针变量p时指向整型的指针,而右边是数组(类型是数组)的地址,不是数组元素(类型是整型)的地址,所以不能赋值。
应该赋值给数组指针(下面会讲到)。

关于数组名,切记以上两点。

二、关于指针数组

1.定义

指针数组,就是存放指针的数组,数组里的元素是指针(对比于整型数组,整型数组就是存放整型的数组,数组里的元素是整型)

int *ptr[3];如何理解?按照运算符优先级,[]优先级较大,所以ptr先与[3]结合,表示ptr是一个数组,必然要明确数组的元素类型,所以数组里的元素类型是整型指针(int*),数组的大小不一定需要(定义数组时可以根据初始化的元素个数确定)

ptr[0]就是数组的第零个元素,它是一个整型指针。

示例如下:

int a[3] = {1, 2, 3};
int x = 5;
ptr[0] = &x;
ptr[1] = &a[2];

2.如何使用?

像一般指针一样使用。*ptr[0]就是第零个元素(一个指针)所指向元素的值,这里是 5。

三、关于数组指针

1.定义

数组指针,就是指向数组的指针,它是一个指针,指向一个数组(对比于整型指针,就是指向整型的指针,它是一个指针,指向一个整型)

int (*ptr)[3]; 如何理解?先看小括号里面,*ptr说明ptr是一个指针,然后跟[]结合表明这个指针指向一个数组,数组的元素是int

int a[3] = {1, 2, 3};
int(*ptr)[3] = a;//这条语句不成立。

右边a是数组名,还记得上面说的吗,数组名代表数组第一个元素的地址,就是&a[0],数组名的类型相当于整型指针(不知道事实上是不是)int *,因为它指向了第一个元素,第一个元素是int

左边ptr的类型是int(*)[],是数组指针,指向数组的指针,不是指向整型的指针,不能赋值。

int a[3] = {1, 2, 3};
int (*ptr)[3] = &a;//正确。

因为a是一个数组,&a就是数组的地址,还记得上面说的吗?

2.如何使用?

int a[3] = {1, 2, 3};
int (*ptr)[3] = &a;

cout << (*ptr)[0] << endl;  //输出1
cout << (*ptr)[1] << endl;  //输出2

这里有一点难以理解。不防对比一下一下代码。

int a[3] = {1, 2, 3};
int x = 5;
int * p = &x;
cout << *p << endl;  //输出5

p是一个指向整型的指针,*p就是所指向的变量(整型x)的值。同理ptr是指向数组的指针,*ptr就是所指向的变量(数组a)的值。(*ptr)[0]就是数组的第零个元素。

四、关于二维数组

1.二维数组是一个数组,它的元素是一维数组。谨记这一点,然后把上面的套进来就行了。

int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

数组名

a是数组第一个(或者说第零个更好)元素的地址,第一个元素是一维数组,a[0] ------> {1, 2, 3}。a+1是第二个元素的地址,就是第二个一维数组的地址,超出了3*4个字节

&a是数组的地址,&a+1 就是超出了一个二维数组的大小,超出了3 * 4 * 3 个字节。

数组指针

int (*ptr)[3] = a; //正确。

因为a表示第一个元素的地址,第一个元素是一个一维数组,所以a表示一个一维数组的地址,一个数组的地址赋值给数组指针,成立。

五、总结:

1.数组名表示数组的第一个元素的地址。

2.&a(a是一个数组)是数组的地址。

3.指针数组是一个数组,它的元素是指针。

4.数组指针是一个指针,它指向一个数组。

5.二维数组的元素是一维数组。

相关文章
  • C++指针数组.数组指针.数组名及二维数组技巧汇总 2015-03-03

    这篇文章主要介绍了C++指针数组.数组指针.数组名及二维数组技巧汇总,对于深入理解C++数组与指针来说非常重要,需要的朋友可以参考下 本文较为详细的分析了关于理解C++指针数组,数组指针,数组名,二维数组的一些技巧.是比较重要的概念,相信对于大家的C++程序设计有一定的帮助作用. 一.关于数组名 假设有数组: int a[3] = {1, 2, 3} 1.数组名代表数组第一个元素的地址,注意,不是数组地址(虽然值相等),是数组第一个元素地址,a 等同于 &a[0]; a+1是第二个元素的地址.比

  • c#基础之数组与接口使用示例(遍历数组 二维数组) 2015-03-11

    本文主要介绍了c#基础知识中的数组与接口使用方法,结合示例,大家一看就明白 一.初始化数组: string[] s1 = {"aaa","bbb","ccc"} //直接赋值 string[] s2 = new string[5] {"aaa","bbb","ccc"}; //赋值加指定长度 string[] s3 = new string[]{"aaa","

  • js二维数组定义和初始化的三种方法总结 2015-04-28

    本篇文章主要是对js二维数组定义和初始化的三种方法进行了总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 方法一:直接定义并且初始化,这种遇到数量少的情况可以用 var _TheArray = [["0-1","0-2"],["1-1","1-2"],["2-1","2-2"]] 方法二:未知长度的二维数组 var tArray = new Array(); //先声明一维 for

  • Objective-C 下用 NSArray 和 NSMutableArray 定义二维数组跟多维数 2014-08-17

    Objective-C 下用 NSArray 和 NSMutableArray 定义二维数组跟多维数组 目录 问题描述 Objective-C 中的数组对像 NSArray 和 NSMutableArray 简介 二维数组:嵌套两次的 NSMutableArray 多维数组:嵌套多次的 NSMutableArray 问题描述 说实话,不太习惯面向对象编程,所以在操作 Objective-C 中数组对象时,总是忍不住跟 C 中的数组做比较,正好要建立一个二维数组,需要根据二维数组的下标来做相应的设

  • php二维数组用键名分组相加实例函数 2015-03-08

    php二维数组以键名进行分组相加的实例程序 本文介绍一篇关于php 二维数组以某一键名进行分组相加的实例程序,如果是从数据库里取数据的时候大可以SELECT SUM(t_value),t_id FROM t_table GROUP BY t_id,但是如果是在php程序中处理类似的问题就稍微麻烦点了,这里给个函数就是处理类似的问题 <?php /* 函数功能:对二维数组以某一键名进行分组相加,返回新的二维数组 * 参数说明:$arr-源数组:$new_arr-相加后得到的新数组:$target_

  • 详解网友 陈新立 C/C++二维数组 疑问 2012-03-26

    他问的题目是:一个二维数组int a[2][3]; 为什么int* p =a ;和int* p =a[0];结果一样.由于通过留言方式回答比较麻烦,直接写帖子跟贴比较爽快.下面是我的解答.如有错误,请指出,谢谢. Code: #include <stdio.h> //关于二维数组的问题 int main(void) { int a[2][3]={{1,2,3},{4,5,6}}; int* p = a;//这边a是数组名,a的类型是指向包含3个元素的数组的指针 int* p2 = a[0];/

  • C语言二维数组传值 2014-04-18

    //c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下: //方法一, 形参给出第二维的长度. #include <stdio.h> void func(int n, char str[][5]) { int i; for (i = 0; i < n; i++) { printf("\nstr[%d] = %s\n", i, str[i]); } } void main() { char str[][5] = {"abc", "

  • PHP统计二维数组元素个数的方法 2014-07-10

    数据表里面的字段 content 存储了一个以逗号分割的字符串,最大有20个数,最大数字为40.比如3,24,33,40类似字样的数字序列.其实就是一个保存了多项投票结果的字段啦.现在需要统计每个数字的个数,也就是每个投票项有多少人投了,并排序 解决思路 1. 首先从数据库的congtent字段读取数据,并把它们合并成一个字符串. <?php while($myrow = $connector -> fetch_array($result)) { //$r[] = explode("

  • php对二维数组按指定键值key排序示例代码 2014-08-10

    对二维数组按指定键值key排序,对于一些新手朋友或许存在难度,下面为大家介绍下在php中时如何实现的 function array_sort($array, $key){ if(is_array($array)){ $key_array = null; $new_array = null; for( $i = 0; $i < count( $array ); $i++ ){ $key_array[$array[$i][$key]] = $i; } ksort($key_array); $j =

  • php使用session二维数组实例 2014-08-27

    这篇文章主要介绍了php使用session二维数组的用法,实例形式讲述了session中对于二维数组的运用技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了php使用session二维数组的用法.分享给大家供大家参考.具体如下: 最普通的用法:一个变量名 $_SESSION['user'] = 0; echo $_SESSION['user']; 使用数组: 复制代码 代码如下: $_SESSION['user']['a'] = 1; $_SESSION['user']['b'] =

  • php一维二维数组键排序方法实例总结 2014-10-18

    这篇文章主要介绍了php一维二维数组键排序方法,以实例形式总结了针对一维数组的冒泡排序与使用array_multisort()对二位数组按照指定键值排序等方法,具有不错的参考借鉴价值,需要的朋友可以参考下 本文实例总结了php一维二维数组键排序方法.分享给大家供大家参考.具体方法如下: 在php中数组排序一直是一个老生常谈的问题,下面我们来集中讲一下关于在php中一维数组与二维数组排序的实现程序,相信对大家有一定的参考借鉴价值. 功能:对数组进行重新排序. 说明:冒泡排序 (一维数组)(二维数组

  • PHP排序之二维数组的按照字母排序实现代码 2013-10-14

    PHP排序之二维数组的按照字母排序方法,在实际开发还是非常有用的,有需要的拿去 <?php /** * Sort an two-dimension array by some level two items use array_multisort() function. * * sysSortArray($Array,"Key1","SORT_ASC","SORT_RETULAR","Key2"--) * @author

  • 逆序二维数组插入一元素的php代码 2014-02-26

    逆序二维数组插入一元素的php代码,需要的朋友可以参考下 <?php /** * 逆序二维数组插入一元素 * * @author WadeYu * @date 2012-05-30 */ $aSorted = array( array(1, 100), array(2, 90), array(3, 80), array(4, 70), array(5, 60), array(6, 50), array(7, 40), array(8, 40), array(9, 40), array(10, 2

  • php二维数组合并及去重复的方法 2014-03-08

    这篇文章主要介绍了php二维数组合并及去重复的方法,实例分析了php合并数组与删除重复项的技巧,需要的朋友可以参考下 本文实例讲述了php二维数组合并及去重复的方法.分享给大家供大家参考.具体实现方法如下: $arr = array_merge($labels,$label); //合并需要合并的俩个数组 $key = id;//去重条件 $tmp_arr = array();//声明数组 foreach($arr as $k => $v) { if(in_array($v[$key], $tm

  • Javascript 二维数组 2014-03-15

    Javascript二维数组的实现代码,需要的朋友可以参考下. <script language="JavaScript"> var x=3, y=4; var data = new Array(x); for (var i=0; i<x; i++) { data[i] = new Array(y); } for (var i=0; i<x; i++) { for (var j=0; j<y; j++) { data[i][j] = i + j; } }

  • C#使用foreach语句遍历二维数组的方法 2014-03-16

    这篇文章主要介绍了C#使用foreach语句遍历二维数组的方法,实例分析了C#遍历数组的技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了C#使用foreach语句遍历二维数组的方法.分享给大家供大家参考.具体分析如下: 如果通过for语句循环遍历二维数组需要两重循环才可以,二foreach语句只需要一次可以完全遍历整个二维数组,下面是代码演示 using System; public class w3demo{ public static void Main() { int su

  • php二维数组转成字符串示例 2014-03-16

    这篇文章主要介绍了php二维数组转成字符串示例,需要的朋友可以参考下 function arr2str ($arr) { foreach ($arr as $v) { $v = join(",",$v); //可以用implode将一维数组转换为用逗号连接的字符串 $temp[] = $v; } $t=""; foreach($temp as $v){ $t.="'".$v."'".","; } $t=su

  • JavaScript二维数组实现的省市联动菜单 2014-04-05

    这篇文章主要介绍了使用二维数组实现的省市联动菜单,通过二维数组存储城市列表项,需要的朋友可以参考下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript"> //初始化一个二维数组存储城市列表项 var ci

  • PHP遍历二维数组的代码 2014-05-11

    最近在研究PageCookery的快速发布,解决手机没有Cookies的问题.在谓语调用部分要历遍数据库读取的二维数组. 一开始打算用foreach来历遍,但是发现没有成功,oo不过关,没办法oo写······ 研究后决定用for循环,演示代码如下: <?php $blog=array( array( "titledata"=>"titleMM", "bodydata"=>"bodyMM" ), array(

  • PHP二维数组的去重问题解析 2014-05-18

    PHP数组去除重复项有个内置函数array_unique(),但是php的array_unique函数只适用于一维数组,对多维数组并不适用,以下提供一个二维数组的array_unique函数. 之前写了一篇关于数组去重的文章,但是仅限于一维数组.下面的函数可以用于二维数组: //二维数组去掉重复值 function array_unique_fb($array2D) { foreach ($array2D as $v) { $v = join(",",$v); //降维,也可以用imp