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

2016-12-19 19:03 出处:360java.com 作者:360java 评论(
1. 数组指针: 指向数组的指针是数组指针 先看下面一段代码: #include stdio.hint 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;} 运行上面的代

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

先看下面一段代码:

#include <stdio.h>

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

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

    return 0;
}

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

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

上面代码中&m是指向数组的指针,也就我们说的数组指针,它在m在数值上是完全相等的,都指向的是同一段内存的起始地址经网友garbageMan指正,改为 “分别指向的是具有同一起始地址的两段(块)内存”。但是它们的类型确是不同的。其中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 *),它的每个变量都可以用来存放地址。

 

分享到:
本文标签: 语言, 数组, 指针

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

Copyright (C) 360java 360java.com, All Rights Reserved.

苏ICP备16022210号