1. 指针数组

  定义:int *p[n],由于[]的优先级高于*,p和[]结合成一个数组,该数组的元素存储的是int类型的指针,由于数组内容是指针,因此p+1的步长是sizeof(int*),在32位机器上,步长通常是4个字节;

  int a[3][4];

  int *p[3]; // 指针数组,具有3个类型为(int*)的元素;

  p[0] = a[0]; // 将第一个元素的值赋值为a[0];

  p[1] = a[1]; // 将第二个元素的值赋值为a[1];

  p[2] = a[2]; // 将第三个元素的值赋值为a

  

2. 数组指针:

  定义:int (*p)[n],由于()的优先级高于[],p和()结合成一个指针,指向一个具有n个int类型元素的数组,由于指针指向的是一个数组,p+1的步长是sizeof(int)*n,因此数组指针又可以称为行指针,在2维数组中,其步长是一行元素的总长度;

  int a[3][4];

  int (*p)[4] = a; // 数组指针,指向一个具有4个元素的一维数组,现在p的指向的地址和a的首地址一样;

  p++; // 步长为sizeof(int) * 4,指向二维数组的下一行的地址,即&a[1];

例子:

 int a[][] = {
{ , , },
{ , , },
{ , , }
};
int b[] = { , , , }; int (*pa)[] = a;
int (*pb)[] = &b;
int *pc = b;
int *pd[];
pd[] = a[];
pd[] = a[];
pd[] = b;
int **pe = (int**)(new char[sizeof(int*) * ]);
pe[] = a[];
pe[] = a[];
*(pe + ) = a[];

打印:

   printf("pa %p %p \n", *pa, *(pa + ));
printf("pa %d %d %d \n", **pa, **(pa + ), *(*(pa + ) + ));
printf("pb %p %p \n", *pb, *(pb + ));
printf("pb %d %d \n", **pb, **(pb + ));
printf("pc %p %p \n", pc, pc + );
printf("pc %d %d \n", *pc, *(pc + ));
printf("pd %p %p %p %p \n", pd[], pd[], *(pd + ), *(pd + ) + );
printf("pd %d %d %d %d \n", *pd[], *(pd[] + ), **(pd + ), *(*(pd + ) + ));
printf("pe %p %p %p \n", pe[], pe[], *(pe + ));
printf("pe %d %d %d \n", *pe[], *(pe[] + ), *(*(pe + ) + ));   pa 0x7fff5fbff7e0 0x7fff5fbff7ec
  pa
  pb 0x7fff5fbff7d0 0x7fff5fbff7e0
  pb
  pc 0x7fff5fbff7d0 0x7fff5fbff7d4
  pc
  pd 0x7fff5fbff7e0 0x7fff5fbff7ec 0x7fff5fbff7d0 0x7fff5fbff7d4
  pd
  pe 0x7fff5fbff7e0 0x7fff5fbff7ec 0x7fff5fbff7f8
  pe

C/C++中的指针数组和数组指针的更多相关文章

  1. C/C++中数组转换成指针的情况

    数组转换成指针:在大多数用到数组的表达式中,数组自动转换成指向数组首元素的指针.比如: int ia[10]; int *p = ia; //ia转换成指向数组首元素的指针 以下情况上述转换不会发生: ...

  2. PHP中使用数组指针函数操作数组示例

    数组的内部指针是数组内部的组织机制,指向一个数组中的某个元素.默认是指向数组中第一个元素通过移动或改变指针的位置,可以访问数组中的任意元素.对于数组指针的控制PHP提供了以下几个内建函数可以利用. ★ ...

  3. C语言中字符数组和字符串指针分析

    这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么 用到过C,虽然网上这类的文章也有很多,还是决定自己在这 ...

  4. 对于C语言中数组名是指针的理解

    我们都知道,c语言中数组名是一个指针,比如下面这段代码 #include<iostream>using namespace std;int main(){ int a[4]={1,2,3, ...

  5. C语言中的声明解析规则——数组,指针与函数

    摘要:C语言的申明存在的最大问题是:你无法以一种人们所习惯的自然方式和从左向右阅读一个声明,在引入voliatile和const关键字以后,情况更加糟糕了.由于这些关键字只能出现在声明中,是的声明形式 ...

  6. OpenCV二维Mat数组(二级指针)在CUDA中的使用

    CUDA用于并行计算非常方便,但是GPU与CPU之间的交互,比如传递参数等相对麻烦一些.在写CUDA核函数的时候形参往往会有很多个,动辄达到10-20个,如果能够在CPU中提前把数据组织好,比如使用二 ...

  7. C语言中数组变量和指针变量

    指针变量为什么需要类型? 数组变量和指针变量在使用sizeof时不同,sizeof(数组变量)是数组长度,sizeof(指针变量)是存储int的字节长度4或者8(64bit). 数组变量在参数传递中, ...

  8. 别人不会给你说的---C语言中数组名和指针的区别 及 sizeof用法

    引自: http://blog.csdn.net/tianyue168/article/details/5781924 #i nclude <iostream.h> int  main( ...

  9. c语言中数组,指针数组,数组指针,二维数组指针

    1.数组和指针 ] = {,,,,};// 定义数组 // 1. 指针和数组的关系 int * pa = array; pa = array; // p[0] == *(p+0) == array[0 ...

随机推荐

  1. 网站后台调用winform MessageLoopApartment

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. SQLSTATE[HY000] [2003] Cant connect to MySQL server

    今天要连远程数据库,结果PHP报错 Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2003 ...

  3. What is the PPA and How to do with it ?

    Part of the appeal of Ubuntu is its six-month release cycle. Every six months a new version of the f ...

  4. SQL匹配顺序

    SELECT%DISTINCT%%FIELD%FROM %TABLE%%JOIN%%WHERE%%GROUP%%HAVING%%ORDER%%LIMIT% %UNION%%COMMENT%

  5. [转]设置Android手机以使用ARM Streamline进行性能分析(二)

    原文因为arm社区改版访问不到了,原作者鲍方,原文地址,这篇是从google cache里挖出来的,希望能帮到要对cocos2dx优化的各位   Posted by Fang Bao, Leave C ...

  6. DAO接口及实现类

    DAO接口中定义了所有的用户操作,如添加记录.删除记录及查询记录. package chapter13; import java.util.*; public interface UserDAO { ...

  7. 利用scale9sprite制作动态聊天背景

    先上效果图 首先创建Scale9Sprite然后设置设置一个比较重要的属性 auto pScale9bg = ui::Scale9Sprite::create(); pScale9bg->set ...

  8. 【转载】WebDriver常用的鼠标/键盘操作

    注:driver为一个WebDriver的实例,xpath为一个元素的xpath字符串,在本文中一律采用xpath的方式定位元素 1.鼠标右键点击操作:Actions action = new Act ...

  9. dpkg ---- apt-get ------ aptitude 三种方式的区别 及命令格式

    转自:http://blog.csdn.net/xiaoyanghuaban/article/details/22946987 dpkg绕过apt包管理数据库对软件包进行操作,所以你用dpkg安装过的 ...

  10. struts2 ajax的一种实现方式

    /** * ajax请求,通过省份id获取学习中心 */ public void getSitesByPid() { HttpServletResponse response = ServletAct ...