数组和指针有关sizeof的题目


1  64位系统下,分别定义如下两个变量:char  *p[10] ;        char  (*p1)[10] ;      ,请问,sizeof(p)   和  sizeof(p1)   分别值为   80  和  8.

 

         指针数组:array of pointers  ,即用于存储指针的数组,也就是说数组元素是指针,本质上是数组

                      指针数组的定义: 类型说明符 *指针数组名[ 长度 ] = { 初值 }; 

          数组指针:a pointer to an array  ,即指向数组的指针 , 本质上是指针

                   指向一维数组指针的定义: 类型说明符 (*指针变量名)[ 一维数组长度 ] [ = 初值 ];

         例如:

                    {
                             int a[4][5];
                             int (*p)[5]=a;
                     }

            这里a是一个二维数组的数组名,相当于一个二级指针常量;

            p是一个指针变量,它指向包含5个int元素的一维数组,此时 p 的增量 以它所指向的一维数组长度为单位

             *p+i是二维数组a[0][i]的地址;

            *(p+2)+3表示a[2][3]地址(第一行第一列皆表示为0行0列),*(*(p+2)+3)表示a[2][3]的值。

            //(*p)[5]其中的5换成其他的数字在vc++6.0环境中都无法通过编译

            (*p)[5]其中的5在上述例子中没有表示任何意思,你可以换成除0以外的整数,[5]的作用就是帮助你记住你所指向的一维数组的长度。

              (不过除了与定义的二维数组的长度一致的不会警告之外)其它的数会警告但是不影响结果。

          在函数定义中,形式参数  char s[ ]  和 char *s 是等价的。 表示的是一个指针。

        当把数组名传递给一个函数时,实际上传递的是该数组第一个元素的地址。在被调用函数中,该参数是一个局部变量,因此,数组名必须是一个指针,也就是一个存储地址值的变量。

 

2  在32位系统下,请计算sizeof的值

char str[ ] =  “http://www.xxxxx.com";
char *p = str;
int n = 10;
请计算
sizeof( str )  =  <span style="color:#cc0000;">21
</span>sizeof( p ) = <span style="color:#ff0000;">4
</span>sizeof( n ) = <span style="color:#ff0000;">4
</span>void Foo ( char str[100] ){ }
请计算 sizeof( str ) = <span style="color:#ff0000;">4

</span>void *p = malloc ( 100 );
请计算 sizeof ( p ) = <span style="color:#ff0000;">4</span>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值