您的位置:首页 > 其它

数组、指针 与 vector、迭代器

2012-12-30 22:09 176 查看
  很多原因导致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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: