您的位置:首页 > 编程语言

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

2012-03-21 16:32 274 查看
#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只关心存储的数据内容,不关心空间的大小和类型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: