参考出处:

http://www.cnblogs.com/mq0036/p/3382732.html

http://www.cnblogs.com/hongcha717/archive/2010/10/24/1859780.html

出处中判断哪个是数组指针和指针数组?

A int*p1[10] B int(*p2)[10]

首先看看他们的类型,在 VS C++中使用sizeof运算符。

printf("%d\n",sizeof(p1));  //结果 40  可以看出是一个数组,每一个元素是一个指针,共有10个指针,所以是指针数组,重点在数组上
printf("%d\n",sizeof(p2)); // 结果 4   可以看出是一个指针,指向的是一个数组。

出处中提出了怎样判断的观点:通过优先符判断,对于 int*p[10]    []优先符高,说明是一个数组,每个元素是 int* 类型的指针;对于Int(*p)[10] 优先符()最高,说明是一个指针,指向的是一个整型的一维数组。

然后我们看看如何使用它们获得2维数组的元素值:

int a[2][10] = {{1,1,1,1,1,1,1,1,1,1},{2,2,2,2,2,2,2,2,2,2}};

p1 = a?

p2 = a?

大家都知道 a是一个指向指针的指针常量,a代表整个二维数组的首地址的地址常量,a等价于&a[0] ,是第一个元素的地址,所以指针p2赋值&a[0]是正确的。因为类型相当: 前一种写法不对,后一种对。

那么p1如何赋值呢? 因为p1是指针数组,正确写法是 p1 = a[0]  p1=a[1] ...

完整代码如下:

printf("------");
int *p1[10];
printf("%d\n",sizeof(p1));
int (*p2)[10];
printf("%d\n",sizeof(p2));

int a[2][10] = {{1,1,1,1,1,1,1,1,1,1},{2,2,2,2,2,2,2,2,2,2}};

printf("---指针数组的使用---\n");
for (int i=0;i<2;i++)
{
p1[i] = a[i];
for (int j=0;j<10;j++)
{
printf("%d ",p1[i][j]);
}

printf("指针数组每一行的首地址:p1[i] =  %d  a[i] = %d",p1[i],&a[i]);//1 1 1 1 1 1 1 1 1 1 指针数组每一行的首地址:p1[i] = 13041008 a[i] = 13041008   2 2 2 2 2 2 2 2 2 2 指针数组每一行的首地址:p1[i] = 13041048 a[i] = 13041048

printf("\n");
}

printf("---数组指针的使用---\n");
p2 = a; //写法最简单
for (int i = 0;i<2;i++)
{

for (int j=0;j<10;j++)
{
printf("%d ",p2[0][j]);
}

printf("指针数组每一行的首地址:p2[i] =  %d  a[i] = %d",p2,&a[i]); //结果和上面对应的一样,这也是这两者的区别
p2++; //如果这地方写 p2++说明是指向下一行的指针 那么访问的时候直接使用 p2[0][j] 向该行逐个移动指针
printf("\n");

}

printf("%d ",a);
printf("%d ",&a);
printf("%d ",&a[0]); 他们三个值是一样的,说明是数组首元素的地址

附int**的使用

int **p = new int *;
int ar1[10]={1,2,3,4,5,6,7,8,910};
p[0] = ar1;//p[0]代表的是int*类型
int ar2[3]={1,2,3};
p[1] = ar2;
int * pm = p[1];
printf("%d",pm[2]);
std::cout<<pm[2];

C 再识数组指针 指针数组的概念的更多相关文章

  1. C语言-再论指针与数组

    指针与数组的天生姻缘1.以指针方式来访问数组元素(1).数组元素使用时不能整体访问,只能是单个访问.访问形式有两种:数组形式和指针形式.(2).数组形式访问数组元素:数组名[下标]:(下标从0开始(3 ...

  2. c/c++ 函数、常量、指针和数组的关系梳理

    压力才有动力,15年中旬就要准备实习,学习复习学习复习学习复习学习复习……无限循环中,好记性不如烂笔头……从数组开始,为主干. c 的array由一系列的类型相同的元素构成,数组声明包括数组元素个数和 ...

  3. 把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)

    督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1.我们知道,将一个数组赋给另一个数组,就是将一个数组的元素逐个赋值给另一数组的对应元素,相应的,将一个vector 赋给另 ...

  4. 11-C语言指针&一维数组&字符串

    一.用指针遍历数组元素 1.最普通的遍历方式是用数组下标来遍历元素 1 // 定义一个int类型的数组 2 int a[4] = {1, 2, 3, 4}; 3 4 int i; 5 for (i = ...

  5. C语言核心之数组和指针详解

    指针 相信大家对下面的代码不陌生: int i=2; int *p; p=&i;这是最简单的指针应用,也是最基本的用法.再来熟悉一下什么是指针:首先指针是一个变量,它保存的并不是平常的数据,而 ...

  6. 《征服 C 指针》摘录3:数组 与 指针

    一.数组 和 指针 的微妙关系 数组 是指将固定个数.相同类型的变量排列起来的对象. 正如之前说明的那样,给指针加 N,指针前进“当前指针指向的变量类型的长度 X N”. 因此,给指向数组的某个元素的 ...

  7. 《C专家编程》第四章——令人震惊的事实:数组和指针并不相同

    数组和指针是C语言里相当重要的两部分内容,也是新手程序员最容易搞混的两个地方,本章我们锁定指针与数组,探讨它们的异同点. 首先来看指针与数组在声明上的区别: int a[10]; int *p; 很明 ...

  8. 【C语言学习】《C Primer Plus》第10章 数组和指针

    学习总结 1.数组初始化方式: int a[]={1,2,3} int a[SIZE]={1,2,3} //SIZE是宏定义,数组初始化个数不能大于SIZE,否则报错:当个数小 //SIZE,自动补0 ...

  9. C++数组和指针

    <C++ Primer 4th>读书摘要 与 vector 类型相似,数组也可以保存某种类型的一组对象:而它们的区别在于,数组的长度是固定的.数组一经创建,就不允许添加新的元素.指针则可以 ...

  10. 深入理解C语言中的指针与数组之指针篇

    转载于http://blog.csdn.net/hinyunsin/article/details/6662851     前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...

随机推荐

  1. PowerDesigner自定义列和过滤器

    好多次要增加注释列,默认值列都忘了怎么设置,写下来以备后用:) 选中表,然后右键,选择properties->columns->点击下图中那个不显眼的小图标(Customize Colum ...

  2. MYSQL 分析表、检查表和优化表

    1. 对表进行优化 ( 优化表主要作用是消除删除或者更新造成的空间浪费) 2. 对表进行分析(分析关键字的分布, 分析并存储MyISAM和BDB表中键的分布) 3. 对表进行检查(检查表的错误,并且为 ...

  3. vim中光标的前进和后退

    流行的文本编辑器通常都有前进和后退功能,可以在文件中曾经浏览过的位置之间来回移动.在 vim 中使用 Ctrl-O 执行后退,使用 Ctrl-I 执行前进.相关帮助: :help CTRL-O  :h ...

  4. c语言趣味

    改编java趣味100题,c语言版 1.C语言版金字塔 #include <stdio.h> int main() { int n,i,j,k; scanf("%d", ...

  5. 10891 - Game of Sum

    Problem EGame of SumInput File: e.in Output: Standard Output This is a two player game. Initially th ...

  6. Android 自学之核心服务

    所谓Android的核心服务主要包括熵服务(Entropy Service).电源管理器(Power Manager).Activity管理器(Activity Manager).通话寄存器(Tele ...

  7. [未完成]关于JavaScript总结

    jsp服务端,js客户端. javascript 是基于对象和事件驱动的脚本语言. 特点: 交互性 安全性(不允许直接访问本地硬盘) 跨平台性(只要是可以解析java的浏览器都可以执行,和平台无关) ...

  8. MYSQL5.5和5.6参数的差异

    performance_schema 在 MySQL 5.6 中默认是开启的,但相关的很多参数相比 MySQL 5.5 却是降低了,例如 performance_schema 自动调整到 445 个表 ...

  9. [Wordpress]Wordpress使用SMTP发送电邮

    参考:phpmailer_init中的代码,可以配置使用SMTP发送电邮 官方的案例代码是: add_action( 'phpmailer_init', 'my_phpmailer_example' ...

  10. 4632 NOIP[2015] 运输计划

    4632 NOIP[2015] 运输计划  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 大师 Master 题解       题目描述 Description 公元 2044 ...