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

C++ 数组

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

 

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

 

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

n  所有数组的范围是从0k – 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++字符串要特别小心:

下面的操作不会是你期望的那样,它会是让str1strl2都指向”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要方便。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值