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. js传url中文参数乱码问题

    $("#btnKeyWord").click(function () { window.open("/Atraction/Atraction.aspx?keyword=& ...

  2. NSIS 的简介

    NSIS (Nullsoft Scriptable Install System)是一个Open Source的Windows系统下安装程序制作程序.它提供了安装.卸载.系统设置.文件解压缩等功能.这 ...

  3. javascript笔记7-事件

    主要讲事件流.事件捕获.事件冒泡.事件处理程序.事件属性.事件类型.内存和优化等. 由于本文已经在微信订阅号上发布,为了防止原创性冲突检测,因此本文在此处已经删除. 详细请扫描订阅号二维码,查看历史信 ...

  4. UIMenuController的使用,对UILabel拷贝以及定制菜单

    分类: ios开发2012-08-06 17:15 11961人阅读 评论(0) 收藏 举报 actionmenuuiview 1. Menu所处的View必须实现 – (BOOL)canBecome ...

  5. 【LeetCode OJ】Convert Sorted Array to Binary Search Tree

    Problem Link: http://oj.leetcode.com/problems/convert-sorted-array-to-binary-search-tree/ Same idea ...

  6. HTML标签之<q> <blockquote>

    两个标签都表示“引用”. 不同的是,q标签是行内元素,在内容的开始和结尾处会包有“”,而 blockquote是块级元素,默认带有左右40px的外间距,不带“”. 从语义上讲,前者引用的是小段文字,后 ...

  7. 无锁队列以及ABA问题

    队列是我们非常常用的数据结构,用来提供数据的写入和读取功能,而且通常在不同线程之间作为数据通信的桥梁.不过在将无锁队列的算法之前,需要先了解一下CAS(compare and swap)的原理.由于多 ...

  8. centos启用ftp功能

    1.安装vsftpd组件,安装完后,有/etc/vsftpd/vsftpd.conf 文件,用来配置,还有新建了一个ftp用户和ftp的组,指向home目录为/var/ftp,默认是nologin(不 ...

  9. 《Android深度探索》(卷1)HAL与驱动开发读后感

    第1章:安卓系统移植与驱动开发概述 这一章主要概括的介绍了安卓驱动开发和系统移植的主要内容,对安卓与Linux驱动做了一个总体的介绍.通过对第一章的学习,使我对Linux驱动开发有了一个感性的认识.在 ...

  10. MVC的用法和作用

    最近在学习IOS项目的时候,老师经常提起MVC,在理解的过程中,越来越发现MVC的魅力,MVC:M:Model V:View C:Controller:Model 是用来存储数据的,View 是用来显 ...