设为首页 加入收藏

TOP

C语言要点(二)
2014-11-23 23:33:46 来源: 作者: 【 】 浏览:4
Tags:语言 要点
ar *a时,编译器理所当然的认为 a是一个指针变量,在 32位系统下,占 4个byte。这 4个byte里保存了一个地址,这个地址上存的是字符类型数据。虽然在文件 1中,编译器知道a 是一个数组,但是在文件 2中,编译器并不知道这点。大多数编译器是按文件分别编译的,编译器只按照本文件中声明的类型来处理。所以,虽然a实际大小为 100个byte,但是在文件 2中,编译器认为a 只占4个byte。

我们说过,编译器会把存在指针变量中的任何数据当作地址来处理。所以,如果需要

访问这些字符类型数据,我们必须先从指针变量 a中取出其保存的地址。如下图:

显然,按照上面的分析,我们把文件 1中定义的数组在文件2 中声明为指针会发生错误。同样的,如果在文件 1中定义为指针,而在文件中声明为数组也会发生错误:

文件 1

char *p = “abcdefg”;

文件 2

extern char p[];

在文件 1 中,编译器分配4个byte空间,并命名为 p。同时p里保存了字符串常量“abcdefg”的首字符的首地址。这个字符串常量本身保存在内存的静态区,其内容不可更改。在文件 2中,编译器认为 p是一个数组,其大小为 4 个byte,数组内保存的是 char类型的数据。在文件 2中使用p 的过程如下图:

3. 数组参数与指针参数

无法向函数传递一个数组,C语言中,当一维数组作为函数参数的时候,编译器总是把它解析成一个指向其首元素首地址的指针。

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言之random_n-续 下一篇有关C语言运算符优先级和结合律的..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: