数组、指针 与 vector、迭代器

  很多原因导致C++提供的新特性不受‘待见’,比如人们还是喜欢用scanf、printf而不是cin、cout,喜欢用字符数组而不是string,喜欢用fopen而不是iostream。数组和指针概念也深入人心,vector和迭代器体现了C++的优越性,然而并不多见于普通程序中。此文深入讨论这4种数据结构的概念和使用。

  定义数组的长度必须用常量,如

int n[10];

  或:

int s=3;

int n[s]={1,2,3};

  没有任何可以检测数组长度的函数=也没有自动添加元素的函数(VB中的UBound()和ReDim在C中是不存在的)。strlen()常用于取得字符数组的长度,但要注意是第一个\0字符前的长度。strlen()的宽字符版本是wcslen()。

  在函数体外定义的数组,元素值初始化为0,在函数体内定义的,则无自动初始化,在使用之前,应该自己初始化,否则自增等操作将出现错误结果。字符数组可以用一个字符串来初始化,但会自动加上一个\0字符作结尾,如:

char sz[]="abcd";

  上述sz数组中,包含了5个元素:a,b,c,d和\0。这样的写法sz[4]="abcd";是错误的。

  每个指针都有与之关联的数据类型,如果类型兼容或实际相同,指针可以强制转换,void*便是这种“通航型指针”,常见于函数参数、返回值等传递。例如常见的 (LPSTR)lParanm,将其指针型参数强转为字符类型。未初始化的指针指向未知地址,应避免使用。给指针p赋值可以更改其指向目标,给*p赋值则是改变目标的值。如:

int  m=2, n=3;

int* p=&m;    //p指向m,*p为2

p=&n;   //p指向n,*p为3

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值