//声明:
1.&----取地址运算符
eg: int m = 1;
int *p = &m;//(*p) == m的地址 == &m;
2.*----间接访问运算符
eg: int n = 2;
int *q = n;//(*p) == n
 
/*
Date:2017-05-23
Author:Johnny Zen

数组指针与指针数组 
*/ 
 
/*
数组指针(也称行指针)
定义 int (*p)[n];
地址表示:    p[j]        p+j 
值引用表示:  (*p)[j]  
本质:数组指针只是一个指针变量 
()优先级高,首先说明p是一个指针,指向一个整型的一维数组,
这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。
*/
#include<iostream>
#include<stdlib.h>
using namespace std; #define n 2
#define m 3 int main(){
int array[n][m] = {1,2,3,4,5,6};
int (*p)[m] = array;//行指针;p可指向二维数组a的某一行(所以:p数组长度与要与二维数组的列长度一致)
for(int i = 0; i < n;i++){
for(int j = 0; j < m; j++){
// printf(" [array[i][j]:%d\tp[i][j]:%d]\t ",array[i][j],p[i][j]);
printf(" [array[i][j]:%d\tp[i][j]:%d]\t ",array[i][j],*(p[i]+j));//二者等效 ;注意:p[i]+j:将指向p[i][j]的地址
}
printf("\n");
}
return 0;
} //output:
/*
[array[i][j]:1 p[i][j]:1] [array[i][j]:2 p[i][j]:2] [array[i][j]:3 p[i][j]:3]
[array[i][j]:4 p[i][j]:4] [array[i][j]:5 p[i][j]:5] [array[i][j]:6 p[i][j]:6]
*/
 
 
/*
指针数组
定义 int *p[n];
地址表示: p[i]
值引用表示:*(p[i]+j)   *p[i]
本质:指针数组是多个指针变量
表示:数组a中的元素都为int型指针  素表示:*a[i]   *(a[i])是一样的,因为[]优先级高于* 
 
[]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1是错误的,这样赋值也是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。
如要将二维数组赋给一指针数组:
int *p[3];
int a[3][4];
for(i=0;i<3;i++)
p[i]=a[i];
这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2]
*/
void PointArray(){
  const int n = 3;
  const int m = 4; 
  int *p[3]; //[]优先级高 
  int a[n][m];
  for(int i = 0;i<n;i++){
    for(int j=0;j<m;j++){
      a[i][j] = rand();
      cout<<a[i][j]<<'\t';
    }
  cout<<endl;
  } 
  //p[i]   //显示第i行首元素的地址 
  //*p[i]  //显示第i行第1个元素的数值
  //*(p[i]+2) //显示第i行第3个元素的数值
 
  for(int i=0;i<3;i++){
    p[i]=a[i];
    cout<<p[i]<<'\t';
    cout<<*(p[i]+1)<<'\t';
  }
}
 
int main(){
  // ArrayPoint();   //数组指针 
  PointArray();   //指针数组 
  return 0;
 
/*
小结:
         数组指针            指针数组 
  定义     int (*p)[n]                     int *p[n]
  地址表示       p[j] or p+j                     p[i]
  值引用表示    (*p)[j] (先指针引用,再定位)     *(p[i]+j)  or  *p[i] (先定位,再引用值
*/

[C++]数组指针与指针数组的更多相关文章

  1. C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用

    类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...

  2. C和指针 第八章 数组

    8.1 数组名和指针 int a; int b[10]; a称为一个标量,表示一个单一的值,变量的类型是整数. b是数组,b[1]的类型是整数,b是一个指针常量,表示数组第一个元素的地址.b的类型取决 ...

  3. C和指针 第六章 数组名与指针

    指针的算术运算符是指针和数组之间的一种关联,但不是唯一关联: 可以使用数组名作为指向数组第一个元素的指针,但是不可以给数组名赋新的值. //如下声明a int a[10]; //用a作为指向数组第一个 ...

  4. 全面总结sizeof的用法(定义、语法、指针变量、数组、结构体、类、联合体、位域位段)

    一.前言 编译环境是vs2010(32位). <span style="font-size:18px;">#include<iostream> #inclu ...

  5. c++中的指针之指针在数组

    使用一维指针数组输出一维数组中的数 int array[]={1,2,3,4,5,6};        int *p; p=array;        for(int i=0;i<6;i++){ ...

  6. 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用

    [源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象,  const 指针和指向 const 对象的指针, con ...

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

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

  8. c/c++ 函数指针 指针函数 数组的引用 指针数组 数组指针

    1.指针数组数组指针 引用数组 数组的引用 int *a[10] 指针数组 每一个元素都是一个指针 Int (*a)[10] 数组指针 P指向一个含有10个元素的数组 Int (&a)[10] ...

  9. 指针的指针&指向指针数组的指针

    一.指针的指针    指针的指针看上去有些令人费解.它们的声明有两个星号.例如:        char ** cp;    如果有三个星号,那就是指针的指针的指针,四个星号就是指针的指针的指针的指针 ...

  10. 【C语言】12-指向一维数组元素的指针

    一.用指针指向一维数组的元素 1 // 定义一个int类型的数组 2 int a[2]; 3 4 // 定义一个int类型的指针 5 int *p; 6 7 // 让指针指向数组的第0个元素 8 p ...

随机推荐

  1. jquery Ajax get()/post()

    get()/post()是通過http get/post向服務器請求數據的. http get vs post: get:向指定資源獲取數據 post項指定資源提交數據. get是向遠程服務器的獲取數 ...

  2. BZOJ2733[HNOI2012]永无乡——线段树合并+并查集+启发式合并

    题目描述 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达 ...

  3. SQL语言分类DQL,DML,DDL,DCL,DTL

    SQL语言共分为五大类: 数据查询语言DQL 数据操纵语言DML 数据定义语言DDL 数据控制语言DCL 数据事物语言DTL DQL 数据查询语言DQL基本结构是由SELECT子句,FROM子句,WH ...

  4. Scout YYF I POJ - 3744(概率dp + 矩阵快速幂)

    题意: 一条路上有n个地雷,你从1开始走,单位时间内有p的概率走一步,1-p的概率走两步,问安全通过这条路的概率 解析: 很容易想到 dp[i] = p * dp[i-1] + (1 - p) * d ...

  5. c# 对象存cookie

    下载并引用Newtonsoft.Json.dll 对象转json,然后存cookies string xxx= Newtonsoft.Json.JsonConvert.SerializeObject( ...

  6. 自学Zabbix12.1 Zabbix命令-zabbix_server

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix12.1 Zabbix命令-zabbix_server 1. zabbix核心:z ...

  7. [luogu4264][USACO18FEB]Teleportation

    题解 先吐槽一波题目:便便传送门,出题人还真的有一点厉害的滑稽. 废话不多说. 首先问题的本质就是求如果当这个传送门的端点位于\(y\)的时候,最小的求出总代价,我们设为函数\(f(y)\). 因为这 ...

  8. CF1114F Please, another Queries on Array?(线段树,数论,欧拉函数,状态压缩)

    这题我在考场上也是想出了正解的……但是没调出来. 题目链接:CF原网 题目大意:给一个长度为 $n$ 的序列 $a$,$q$ 个操作:区间乘 $x$,求区间乘积的欧拉函数模 $10^9+7$ 的值. ...

  9. Python文件和异常

    程序和运行时数据是在内存中驻留的,涉及到数据交换的地方,通常是磁盘.网络等,因此需要IO接口. IO编程中,Stream(流)是一个很重要的概念,可以把流想象成一个水管,数据就是水管里的水,但是只能单 ...

  10. AtCoder Grand Contest 004 C - AND Grid

    题意: 给出一张有紫色点的网格,构造一张红点网格和一张蓝点网格,使红蓝点的交集为紫色点. 保证网格四周没有紫色点. 构造一下,使蓝点和红点能够到每个点. #include<bits/stdc++ ...