首页 > 其他 > 详细

复杂类型(一) int *p[10]与int (*p)[10]的区别

时间:2014-03-31 15:50:27      阅读:510      评论:0      收藏:0      [点我收藏+]

 这两天在学习一些基本复杂类型的确认方法,整理了一下思路及写下一些心得。现在让我们一起来看看 int *p[10]与int (*q)[10]这两个形似心不同的东西的究竟是有一些什么样的不同。

 1、首先让我们先来看看这两个变量所占的字节数吧

bubuko.com,布布扣
int _tmain(int argc, _TCHAR* argv[])
{

    int *p[10];
    int (*q)[10];
    printf("%ld %ld\n",sizeof(p),sizeof(q));
    return 0;
}
bubuko.com,布布扣

调试后发现分别占的字节为:

bubuko.com,布布扣

是不是非常神奇呢,现在让我们一起去一点点发现他们之间的小秘密吧。

2 确认方法

  当我们声明一 int *p;是我们知道 这是一个指针,该指针是指向一个int 类型的变量。

  那我们是怎么来确定的呢?

  a、我们声明的是变量p而不是变量*p。(这一点很重要)

  b、变量p离*最近,从而我们确定变量p是一个指针。

  c、我们将*p看作一个整体 则就成了 int A,是一个整形变量。从而我们确定变量p的指向是int类型的变量。  

3、同样的复杂类型也是遵循这个方法的

  (1)现在让我们来看看int *p[10]吧。

  a、首先我们声明一个变量p。

  b、我们要确定票p究竟是跟*靠的近一些还是跟[]靠的近,这里要用到优先级。我们知道 对于一个数组int a[10],访问该数组中的第i个元素可以写成

    a[i]或者*(a+i),从这里知道[]与取*操作时等效的即他们俩是平级,平级在优先级中是遵循向右看齐的原则。

    所以p是离[]近,到此 我们可以确定p是一个数组,他有10个元素。

  c、将p[10]看作一个整体的的到 int *A;可知道数组p中的每一个元素是指向一个int 类型的变量的指针。

      d、总结:int *p[10]是一个指向整形变量的指针数组。

    这样就能解释我们上面计算p的字节数是40了,p是一个指向整形变量的指针数组 所以他的字节数为4*10=40(注意:这里有些编译器分配给指针为8字节,我以为当前用的visual studio 2012为准);

  (2)再让我们来看看 int(* q)[10]吧

    a、我们声明了一个变量q。

    b、由于有()所以q离 *近,可以确定变量q是一个指针。

    c、我们把(*q)看成一个整体得 int A[10], 到此我们可以确定 q是一个指向一个int类型的数组的指针。

    d、总结:int(* q)[10]是指向一个数组的指针,即数组指针。

    既然q是一个指针那么他的字节数就是4(注意:这里有些编译器分配给指针为8字节,我以为当前用的visual studio 2012为准)

复杂类型(一) int *p[10]与int (*p)[10]的区别,布布扣,bubuko.com

复杂类型(一) int *p[10]与int (*p)[10]的区别

原文:http://www.cnblogs.com/showCode/p/3632394.html

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