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

原创 2012年03月21日 16:32:35

#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只关心存储的数据内容,不关心空间的大小和类型。

相关文章推荐

令人震惊的事实:数组和指针并不相同——C专家编程

C语言 数组和指针

C专家编程 十 规则2: C语言把数组下标作为指针的偏移量(二)

把数组下标作为指针加偏移量足C语言从BCPL (C语言的祖先)继承过来的技巧。在人们的常规思维中,在运行时增加对C语言下标的范围检查是不切实际的。因为取下标操作只是表示将要访问该数组,但并不保证一定要...

C专家编程 九 什么时候数组与指针相同(一)

在实际应用中,数组和指针可以丸换的情形要比两者不吋彳 换的情形更为常见。让我们分别考虑“声明”和“使用”(使用它们传统的自:接作义)这两 种情况。 声明本身还可以进一步分成3种情况: •外部数组(ex...

《C专家编程》:深度剖析数组与指针(七)

数组与指针的关系颇有点像诗和词的关系:他们都是文学形式之一,有不少共同之处,但在实际的表现手法上又有各自的特色。---Peter Van Der Linden 在笔记(4)中我们讨论...
  • gogoky
  • gogoky
  • 2016年05月29日 21:23
  • 582

【C专家编程】第4章 数组和指针并不相同

第4章 数组和指针并不相同 数组非指针 int *x; int y[];   第一条是int的指针,第二条声明y是一个int型数组,长度未确定,其存储在别处定义 对数组的引用总是可以写成对指针的引用...

《C专家编程》笔记——数组与指针

《C专家编程》数组和指针并不同标签(空格分隔): C专家编程1. 背景理解1.1 区分定义与声明 p83 声明相当于普通声明:它所说明的并非自身,而是描述其他地方创建的对象,声明可以多次出现; 定义相...

C专家编程 十五 使用指针向函数传递一个多维数组

使用上一节所描述的笨拙方法,可以解决标记数组范围这个难题。但是还存在一个问题, 就是如何在函数内部声明一个二维数组参数,这才是真正的麻烦所在。C语言没有办法表达 “这个数组的边界在不同的调用中可以变化...

C专家编程--指针和数组(三) 值传递 指针传递 引用传递

http://blog.csdn.net/yusiguyuan/article/details/12357381 http://blog.csdn.net/yusiguyuan/article/d...

C专家编程--指针和数组(四) 指针对数组的访问

首先,我要说明的,在C语言中,把“多维数组”叫做“数组的数组”更好理解一下。(下面我就统一称之为“数组的数组”) 有的教程中喜欢将数组的数组用矩阵表示,不过我更趋向于直线表示,如下图(定义数组的数组...

数组和指针作为函数参数——高质量C、C++编程指南

本文内容出自《高质量C、C++编程指南》。阅读之后理解,然后通过自己的话和例子讲清楚,这样才是学习之道。以下内容都是自己所认为的东西,如果哪里错了,希望各位大神指出。 1、数组作为函数的参数进行传递时...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:玩转数组 指针参数之c专家编程第九章
举报原因:
原因补充:

(最多只允许输入30个字)