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. this面试题

    // 考题1 /*function Fn() { console.log(this);//window } Fn(); new Fn();//Fn实例 Fn.apply(Fn); //将this指向F ...

  2. Oracle数据库高效sql语句的整理

    业务需求说明:由于之前公司后台APP端有一个document表,该表中包含了所有的信息,新的需求就是通过该表创建出一个新的用户表(usertable)和一个档案表(document,该表只保留原doc ...

  3. c++语法随身记

    1.memset是计算机中C/C++语言函数.将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值, 第一个值为指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的 ...

  4. POJ 1637 Sightseeing tour (混合图欧拉路判定)

    Sightseeing tour Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6986   Accepted: 2901 ...

  5. PHP性能分析 - ngnx日志分析

    最终结果展示图: 图解:响应时间在40ms以内的请求数占请求总量的7%,40到80ms的的请求数占32.9%,依次类推... 性能问题有很多种可能,普通的情况通过xhprof可查得主要的性能损耗.但有 ...

  6. 2015GitWebRTC编译实录10

    2015.07.20 rtc_p2p编译通过[879/1600 ] CXX obj /webrtc/p2p/client/rtc_p2p.httpportallocator.o[880/1600 ] ...

  7. JAVA修饰符类型(public,protected,private,friendly)

    转自:http://www.cnblogs.com/webapplee/p/3771708.html JAVA修饰符类型(public,protected,private,friendly) publ ...

  8. 《C与指针》第一章练习

    本章例程 程序1.1 重排字符 #include <stdio.h> #include <stdlib.h> #include <string.h> #define ...

  9. C#项目实例中读取并修改App.config文件

    C#项目是指一系列独特的.复杂的并相互关联的活动,这些活动有着一个明确的目标或目的,必须在特定的时间.预算.资源限定内,依据规范完成.项目参数包括项目范围.质量.成本.时间.资源. 1. 向C#项目实 ...

  10. Apache配置代理服务器的方法(1)

    众所周知Apache是目前最优秀的HTTP服务器.实际上它不仅能当作服务器使用,也能够被用来架设代理服务器.本文就如何使用Apache架设HTTP代理服务器进行说明. 本文将基于Win32版的Apac ...