玩转数组 指针参数之c专家编程第九章

#include "stdafx.h"
#include "string.h"
#include "stdio.h"

char ga[] = "abcdefgh";

void my_array_func(char ca[10])
{
 printf(" addr of array param = %#x \n",&ca);
 printf(" addr (ca[0]) = %#x \n",&(ca[0]));
 printf(" addr (ca[1]) = %#x \n",&(ca[1]));
 printf(" *ca =  %c \n", *(ca));
 printf(" ca[0] =  %c \n", ca[0]);
  printf(" strlen(ca) = %d\n",strlen(ca));
 printf(" ++ca = %#x \n\n",++ca);
}

void my_pointer_func(char *pa)
{
 printf(" addr of ptr param = %#x \n", &pa);
 printf(" addr (pa[0]) = %#x \n", &(pa[0]));
 printf(" addr (pa[1]) = %#x \n", &(pa[1]));
 printf(" *pa =  %c \n", *(pa));
 printf(" ++pa = %#x \n",++pa);
 printf(" sizeof(pa) = %#x ,sizeof(*pa) = %#x \n",sizeof(pa),sizeof(*pa));//sizeof计算()内占用的长度
 printf(" strlen(pa) = %d \n",strlen(pa));//从偏移量为1往后开始计算存储内容的长度,strlen计算所指向内容总的长度。
}

int main()
{
 printf(" addr of blobal array = %#x \n",&ga);
 printf(" addr (ga[0]) = %#x \n", &(ga[0]));
 printf(" addr (ga[1]) = %#x \n\n", &(ga[1]));
 my_array_func(ga);
 
 my_pointer_func(ga);

 return 0;

}

 

 

运行结果如下:

数组参数的地址和数组参数的第一个元素的地址竟然不一样。

对了,就是不一样,在函数的形参当中,数组和指针最终编译器最终都是转化为指针来处理,所以会出现上述结果。

 

输出结果中倒数第二行说明了这个。

 

意外总结:sizeof返回定义arr数组时,编译器为其分配的数组空间大小,不关心里面存了多少数据。strlen只关心存储的数据内容,不关心空间的大小和类型。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值