C++ PRIMER之4 数组和指针

来源:互联网 发布:javascript怎么写爬虫 编辑:程序博客网 时间:2024/04/29 22:23

1 数组

数组的维度必须为大于0的常量表达式

int a[3] = {0,1,2};   函数体内的数组,无初始化操作.  函数体外的会初始化默认值.

char b[] = "abc";  会在后面添加一个空字符. 长度为4.

不允许直接复制和赋值. 长度是固定的.

 

2 数组操作

下标类型为size_t  保护好避免越界  buffer overflow

 

3 指针

指针用于指向对象 保存的是另一个对象的地址

double *p;  理解指针时,从右向左阅读.

避免使用未初始化的指针

 

void* 指针 只是为了保存地址.

给指针赋值: p = &A;

通过指针赋值:  *p = "test";

 

4 指针引用区别

引用必须定义时初始化 而且一直指向该对象.

 

指向指针的指针 int **p1 = &p2;

指针访问数组,   int a[] = {1,2,3,4}; int *p = a;  指向数组的第一个元素.

在指针上加上(或减去)一个整型数值 n 等效于获得一个新指针,指向指针原来指向的元素之后(或之前)的第 n 个元素。

两个指针减法操作的结果是标准库类型(library type)ptrdiff_t的数据

int last = *(ia + 4);  获得ia指针数组的[4]元素.  不可写为 *ia + 4  会取出ia的数值再加4.

 

指向 const 的指针常用作函数的形参

 

5 C 风格字符串

带结尾的字符串数组  const char 类型的数组

cstring 是 string.h 头文件的 C++ 版本,而 string.h 则是 C 语言提供的标准库。

#include <cstring>

strlen(s)  返回 s 的长度,不包括字符串结束符 null
strcmp(s1, s2)  比较两个字符串 s1 和 s2 是否相同。若 s1 与 s2 相等,返回 0;若 s1 大于 s2,返回正数;若 s1 小于 s2,则返回负数
strcat(s1, s2)  将字符串 s2 连接到 s1 后,并返回 s1
strcpy(s1, s2)  将 s2 复制给 s1,并返回 s1
strncat(s1, s2,n) 将 s2 的前 n 个字符连接到 s1 后面,并返回 s1
strncpy(s1, s2, n) 将 s2 的前 n 个字符复制给 s1,并返回 s1

 永远不要忘记字符串结束符null
 const char *str = st2.c_str(); // st2的内容可能会改变,所以请注意这样的BUG

 

6 自由存储区或堆

每一个程序在执行时都占用一块可用的内存空间,用于存放动态分配的对象,此内存空间称为程序的自由存储区或堆。C 语言程序使用一对标准库函数
malloc 和 free 在自由存储区中分配存储空间,而 C++ 语言则使用 new和 delete表达式实现相同的功能。

 

int *pia = new int[10]; 此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向该数组第一个元素的指针,此返回值初始化了指针 pia。

 

C-style strings(C 风格字符串) compiler extension(编译器扩展)compound type(复合类型) delete expression(delete 表达式 dynamically allocated(动态分配的)

free store(自由存储区)== heap(堆)precedence(优先级)

0 0
原创粉丝点击