首页 > 编程语言 > 详细

c语言的数组指针与指针数组

时间:2015-04-17 22:12:41      阅读:266      评论:0      收藏:0      [点我收藏+]

1. 数组指针:指向数组的指针是数组指针

先看下面一段代码:

#include <stdio.h>

int main(void)
{
    int m[10];

    printf("m = %p, &m = %p\n", m, &m);
    printf("m + 1 = %p, &m + 1 = %p\n", m + 1, &m + 1);

    return 0;
}

运行上面的代码得到的结果如下图:

技术分享

上面代码中&m是指向数组的指针,也就我们说的数组指针,它在m在数值上是完全相等的,都指向的是同一段内存的起始地址。但是它们的类型确是不同的。其中m是 int *型的指针;而&m指向的是int m[10]这样一个数组,是一个数组指针,因此m +  1 相当于加上 sizeof(int),由上图可以计算(0x0028FEFC - 0x0028FEF8) =  4; 而&m + 1相当于加上sizeof(int[10]),由上图中的计算(0x0028FF20 - 0x0028FEF8) = 40。

可以有如下定义:

int (*p)[10] = &m; 这里p就是一个数组指针,并且这里(*p)的括号是必须的,()的优先级高于[],因此p首先是一个指针,然后指向的是int [10]的数组。

 

2. 指针数组:由多个指针组成的数组是指针数组

int *p[10]; 这里可以和上面数组指针做对比。p首先是一个数组,然后类型是指针,因此p是指针数组(含有10个指针,例如p[0]、p[1]。。。p[9],每个指针的类型为int *),它的每个变量都可以用来存放地址。

 

c语言的数组指针与指针数组

原文:http://www.cnblogs.com/jaydenhpj/p/4436012.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!