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

C++数组,指针及字符串 (14~18)

2009-05-07 11:05 337 查看
C++数组

l 数组是包含同一类型元素的数据类型。



l C++中,数据类型为ELEMENT,元素个数为k的一维数组是长度是一块连续的内存空间(大小为 k * sizeof (ELEMENT))。



l C语言数组有几个明显的限制

n 所有数组的范围是从0到k – 1

n 大小需要在编译时作为常量确定

n 运行时不能改变大小

n 在运行时不执行下标范围的检查。如:

{

int a[10];

for (int i = 0; i <= 10; i++ ) // BAD CODE


a[i] = 0;


}



l 数组在定义时需要提供类型,名称和大小。例如,两个大小分别为10 和100的整型数数声明:

int array[10], vector[1000];

l 在 C++中数组与指针很相似。数组名自动的转换为指向其第一个元素的常指针。与指针不同的仅是执行 sizeof array_name。

l 数组可以在编译时初始化,也可以在运行时初始化。例:

int eight_primers[]
= { 2,3,5,7,11,13,17,19};

int
eight_count[8],i;

for (i = 0; i < 8; i++)

eigth_count[i] =
eigth_primes[i];



多维数组

l C++提供矩形式多维数组。



l 数组元素是与行序存储。



l 多维数组也可以初始化,如:

static char daytab[2][13] =

{


{ 0, 31,28,31,30,31,30,31,31,30,31,30,31},


{ 0, 31,29,31,30,31,30,31,31,30,31,30,31},

}

l 可以省略已确定的初始维度值。

static char daytab[][] =

{

{ 0, 31,28,31,30,31,30,31,31,30,31,30,31},

{ 0, 31,29,31,30,31,30,31,31,30,31,30,31},

}



指针

l 指针是保存另一个变量地针的变量。例:

int I = 10;

int *ip = &i;

l 可以通过直接个修改ip指向的值来修改变量i的值。如:

*ip = i + 1;

/* 总是为真 */

If (*ip == i) {
/**/}



l 注意:指针的大小通常与int的大小一致。32位的系统,大小为4字节,64位的系统为8字节。

l 注意:C++中有时常用引用来代替指针。例如与引用的方式传变量的值。



把数组作参数传递

l 把数组作参数传递的C++语法非常令人迷惑。



l 比如,下面两种声明是等价的:

int sort (int base[], int size);

int sort (int *base, int size);

l 但是,在这里如果您传入一个不正确的变量,编译器将不作任何提示:

int I, *ip;

sort(&I,sizeof i);

sort(ip,sizeof *ip);

l 注意下面才是您真正想要的:

int a[] = { 10, 9, 8, 7, 6, 5,4,3,2,1};

sort (a, sizeof a / sizeof *a);

l But it is difficult to tell this from the function prototype…



字符串

l C++字符串实现为与NUL结尾(‘/0’)的字符数组。所以,每个字符串都有隐含地需要一个额外的字节来保存NUL字符。

l 示例:

char *p; /* 尚未指定存存的字符串 */

char buf[40]; /* 40个字符的字符串 */

char *s = malloc (40); /*40个字符的字符串 */



char* string = “hello”;

sizeof (string) == 4; /*
32bit os */

sizeof(“hello”) == 6;

sizeof buf == 40;

strlen(“hello”) == 5;



l 在<string.h>中定义了一些操作标准字符串的函数。

l 使用C++字符串要特别小心:

下面的操作不会是你期望的那样,它会是让str1和strl2都指向”bar”

char *str1 = “foo”, *str2 = “bar”;

str1 = str2;

l 为了执行字符串复制,您需要用到strcpy函数。如:

strcpy (str1, str2);

l 注意数组和指针的区别:

char* foo = “I am a string constant”;

char bar[] = “I am a charater array”;

sizeof foo == 4;

sizeof bar == 23;

l 使用 C++ String类通常比使用内置的
string要方便。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: