C语言中的声明和定义
2015-08-15 12:24
337 查看
1,声明:相当于普通的声明,它所说明的并非自身,而是描述其他地方创建的对象,没有分配内存空间。
比如:int a[];声明一个整型数组。在其他地方可以创建该类型的对象,a可以被重新赋值。
2, 定义:相当于特殊的声明,它为对象分配内存空间。
比如:int a[100];定义一个整型数组,大小为100,并为其分配100个整型类型大小的字节数。
3,对于指针和数组来说,如果声明一个外部字符指针变量 extern char *p,却在别处定义为数组 char p[10],
那么在访问p[i]内容时,会将p[i]的内容即字符解释为地址,因为p被声明为一个指针,其值是地址。这是错误的。
4,当p声明为指针,只有p定义为指针时,对p所指向的内容的引用才是正确的。
5,当p定义为指针,但以数组方式引用时,其本质是数组的直接访问和指针的间接访问的组合。
例1 char*p="abcdefg";p[3];
p[3]以数组方式引用,其运行步骤如下:
(1):编译器会告知变量符号p的地址,
(2):从p的地址(左值)中得到指针,即p的值(右值)。
(3):将p的值加上偏移量3,得到一个地址,这个地址是指向p[3]内容的地址。
(4):从该地址中取得字符d。
6,当定义为数组,以数组方式引用时,
例2 char p[]="abcdefg";p[3]
p[3] 以数组方式引用时,其运行步骤如下:
(1):编译器会给变量p分配一个地址。
(2):将该地址加上偏移量3,得到新的地址。
(3):从该新的地址中取得内容,即字符d。
比如:int a[];声明一个整型数组。在其他地方可以创建该类型的对象,a可以被重新赋值。
2, 定义:相当于特殊的声明,它为对象分配内存空间。
比如:int a[100];定义一个整型数组,大小为100,并为其分配100个整型类型大小的字节数。
3,对于指针和数组来说,如果声明一个外部字符指针变量 extern char *p,却在别处定义为数组 char p[10],
那么在访问p[i]内容时,会将p[i]的内容即字符解释为地址,因为p被声明为一个指针,其值是地址。这是错误的。
4,当p声明为指针,只有p定义为指针时,对p所指向的内容的引用才是正确的。
5,当p定义为指针,但以数组方式引用时,其本质是数组的直接访问和指针的间接访问的组合。
例1 char*p="abcdefg";p[3];
p[3]以数组方式引用,其运行步骤如下:
(1):编译器会告知变量符号p的地址,
(2):从p的地址(左值)中得到指针,即p的值(右值)。
(3):将p的值加上偏移量3,得到一个地址,这个地址是指向p[3]内容的地址。
(4):从该地址中取得字符d。
6,当定义为数组,以数组方式引用时,
例2 char p[]="abcdefg";p[3]
p[3] 以数组方式引用时,其运行步骤如下:
(1):编译器会给变量p分配一个地址。
(2):将该地址加上偏移量3,得到新的地址。
(3):从该新的地址中取得内容,即字符d。
相关文章推荐
- C++基础---数据类型
- C++基础---“Hello Wolrd”程序
- 详解约瑟夫环问题及其相关的C语言算法实现
- C++基础---编译过程浅析
- 【五】C++函数的升级(二)
- C++中delete和delete[]的区别
- C++基础---简介
- C++中的三大件
- C语言:链接属性与存储类型
- 使用C语言解决字符串全排列问题
- C++中对象初始化
- c++读取文本文件
- 顺序表的C语言实现
- C/C++笔记(一) 2015/8/15
- C++ 遍历所有文件和文件夹,建立文件夹
- 【四】C++函数的升级(一)--内联函数
- C++ 内存分布
- Majority Element && Majority Element II
- 八皇后问题的相关C++代码解答示例
- C++11的特性