(26)'c++:COMPLETE REFERENCE' 第一部分 第四章(数组和以空字符结束的字符串) 第一节
2007-03-21 19:01
531 查看
数组是一组数据类型相同的变量的集合,它们用一个通用的名字来代替.数组中每一个特定的元素都用索引来访问.在C/C++中,数组由一组相邻的内存地址组成.最低位的地址对应数组的第一个元素,最高位的地址对应最后一个元素.数组可以是一维或者多维的.最常见的数组是以空字符结束的字符串,它是一个简单的由字符组成并由空字符做为结束的数组.
数组和指针是密切相关的.它们通常联系在一起讨论.本章着重讲解数组,第五章则重点讲指针.这两章都必须认真阅读,这样才能正确的完整的理解这些结构.
一维数组
一维数组声明的通用格式如下:
type var_name[size];
和变量一样,数组必须进行显式的声明,这样编译器才能为它们分配内存空间.这里,type声明了数组的数据类型,也就是数组中每一个元素的数据类型.size则定义了数组的长度,也就是数组中元素的个数.例如,定义一个含有100个double类型元素的名叫balance的数组:
double balance[100];
单个元素的访问是通过对数组名的索引实现.就是在数组名后面加上方括号,方括号中是索引值.例如:
balance[3] = 12.23;
这个语句对索引为3的数组元素进行赋值.
在C/C++中,所有的数组的索引都是从0开始,0对应数组的第一个元素.因此,当你书写:
char p[10];
相当于定义了一个含有10个元素的数组,元素是从p[0]到p[9].下面的例子中,把0到99载入了一个整型数组:
#include <stdio.h>
int main( void )
{
int x[100]; /* this declares a 100-integer array */
int t
/* load x with values 0 through 99 */
for( t=0; t<100; t++ ) x[t] = t;
/* display contents of x */
for( t=0; t<100; t++ ) printf( "%d", x[t] );
return 0;
}
数组所占内存空间的大小取决于它的长度和数据类型.对于一维数组来说,它的字节数可以用如下方式计算:
total bytes = sizeof( base type ) * size of array
C/C++中并没有对数组提供边界检测.所以,我们有时可能会越界读写数据,也就是有可能会在对数组进行操作的时候改变其它变量的数据甚至改变程序的代码.对于程序员来说,有责任对数组进行边界检查以确保数组操作不会越界.下面的例子程序可以被正确的编译,但是它是有问题的,因为for循环会越过数组的边界.
int count[10], i;
/* this causes count to be overrun */
for( i=0; i<100; i++ ) count[i] = 1;
一维数组本质上是一列具有相同的数据类型,存储在连续的内存空间,按照特定的索引顺序排列的信息.例如,图4-1展示了一个数组是如何在内存中存在的.假设这个数组从内存地址1000开始.按照如下方式定义:
char a[7];
图4-1. 从内存地址1000开始的长度为7的字符数组.
Element a[0] a[1] a[2] a[3] a[4] a[5] a[6]
Address 1000 1001 1002 1003 1004 1005 1006
数组和指针是密切相关的.它们通常联系在一起讨论.本章着重讲解数组,第五章则重点讲指针.这两章都必须认真阅读,这样才能正确的完整的理解这些结构.
一维数组
一维数组声明的通用格式如下:
type var_name[size];
和变量一样,数组必须进行显式的声明,这样编译器才能为它们分配内存空间.这里,type声明了数组的数据类型,也就是数组中每一个元素的数据类型.size则定义了数组的长度,也就是数组中元素的个数.例如,定义一个含有100个double类型元素的名叫balance的数组:
double balance[100];
单个元素的访问是通过对数组名的索引实现.就是在数组名后面加上方括号,方括号中是索引值.例如:
balance[3] = 12.23;
这个语句对索引为3的数组元素进行赋值.
在C/C++中,所有的数组的索引都是从0开始,0对应数组的第一个元素.因此,当你书写:
char p[10];
相当于定义了一个含有10个元素的数组,元素是从p[0]到p[9].下面的例子中,把0到99载入了一个整型数组:
#include <stdio.h>
int main( void )
{
int x[100]; /* this declares a 100-integer array */
int t
/* load x with values 0 through 99 */
for( t=0; t<100; t++ ) x[t] = t;
/* display contents of x */
for( t=0; t<100; t++ ) printf( "%d", x[t] );
return 0;
}
数组所占内存空间的大小取决于它的长度和数据类型.对于一维数组来说,它的字节数可以用如下方式计算:
total bytes = sizeof( base type ) * size of array
C/C++中并没有对数组提供边界检测.所以,我们有时可能会越界读写数据,也就是有可能会在对数组进行操作的时候改变其它变量的数据甚至改变程序的代码.对于程序员来说,有责任对数组进行边界检查以确保数组操作不会越界.下面的例子程序可以被正确的编译,但是它是有问题的,因为for循环会越过数组的边界.
int count[10], i;
/* this causes count to be overrun */
for( i=0; i<100; i++ ) count[i] = 1;
一维数组本质上是一列具有相同的数据类型,存储在连续的内存空间,按照特定的索引顺序排列的信息.例如,图4-1展示了一个数组是如何在内存中存在的.假设这个数组从内存地址1000开始.按照如下方式定义:
char a[7];
图4-1. 从内存地址1000开始的长度为7的字符数组.
Element a[0] a[1] a[2] a[3] a[4] a[5] a[6]
Address 1000 1001 1002 1003 1004 1005 1006
相关文章推荐
- (34)'c++:COMPLETE REFERENCE' 第一部分 第四章(数组和以空字符结束的字符串) 第九节
- (29)'c++:COMPLETE REFERENCE' 第一部分 第四章(数组和以空字符结束的字符串) 第四节
- (31)'c++:COMPLETE REFERENCE' 第一部分 第四章(数组和以空字符结束的字符串) 第六节
- (33)'c++:COMPLETE REFERENCE' 第一部分 第四章(数组和以空字符结束的字符串) 第八节
- (27)'c++:COMPLETE REFERENCE' 第一部分 第四章(数组和以空字符结束的字符串) 第二节
- (30)'c++:COMPLETE REFERENCE' 第一部分 第四章(数组和以空字符结束的字符串) 第五节
- (32)'c++:COMPLETE REFERENCE' 第一部分 第四章(数组和以空字符结束的字符串) 第七节
- (28)'c++:COMPLETE REFERENCE' 第一部分 第四章(数组和以空字符结束的字符串) 第三节
- (19)'c++:COMPLETE REFERENCE' 第一部分 第三章(语句) 第一节
- C++字符数组的输入输出和字符串结束标志使用讲解
- (2)'c++:COMPLETE REFERENCE' 第一部分 第一章(c语言概述) 第一节
- (24)'c++:COMPLETE REFERENCE' 第一部分 第三章(语句) 第五节
- (37)'c++:COMPLETE REFERENCE' 第一部分 第五章(指针) 第三节
- C/C++——字符串和字符数组
- c++中字符数组与字符串的转换
- (18)'c++:COMPLETE REFERENCE' 第一部分 第二章(表达式) 第十节
- C 字符数组与字符串的使用及加结束符'\0'的问题
- c++中字符数组与字符串的转换
- C/C++字符串,字符数组,字符指针及其相互静态拷贝与追加的安全问题解决方案(2)
- c++ primer plus 第五版 第七章 编程练习 第 8 题 (字符数组转成字符串,trim使用,判断空行)