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要方便。
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要方便。
相关文章推荐
- C++_读入很多行字符串到字符串指针数组、或者到字符串数组中
- C++复习5.指针数组字符串
- Unix/Linux C++应用开发-C++基础概念"数组、指针和字符串"
- C++基础概念-数组、指针和字符串
- C++入门笔记(四)数组、指针与字符串
- C++利用指针数组和快排对输入的字符串进行排序
- c/c++ 字符数组、字符指针和字符串类型总结帖
- C++指针和数组:字符和字符串、字符数组
- C++ [ 数组,指针,字符串 ]
- C++学习笔记(一)--整形,std输出,浮点数,数组,字符串,结构,指针,循环
- C/C++字符串,字符数组,字符指针及其相互静态拷贝与追加的安全问题解决方案(1)
- 4-18-2-二级多级指针、指针与数组、多线程并行计算、多线程队列、字符串拷贝
- C++基础教程 学习笔记(二) 数组、字符串和指针
- C/C++学习笔记18:指针数组和数组指针
- C++中的字符串指针和字符数组
- C++指针、数组、字符串结论杂记
- C++指针【数组、字符串作为函数的参数】
- c/c++ 字符数组、字符指针和字符串类型总结帖
- 浅谈C++字符数组与字符串指针
- 【C++基础】 指针&字符串&数组