数组
数组的声明:
数据类型 标识符[常量表达式1][常量表达式2]…
数组的使用:
数组名[下标表达式1][下标表达式2]…
数组的初始化:
int a[] = {1,1,1};
int a[][3] = {1.2.3.4.5.6}
int a[2][3] = { {1,2,3},{4,5,6}};
数组作为函数的参数:
使用数组名传递数据时,传递的是地址。
对象数组: 声明一个一维对象数组的方法:
类名 数组名[下标表达式];
访问对象的成员:
数组名[下标].成员名
指针
指针也是先声明后使用,声明指针的语法形式是:
数据类型 *标识符;
与地址相关的运算: 和 &*
*称为指针运算符,表示获取指针所指向的变量的值,这是一二一元操作符 & 称取地址运算符
指针的赋值: 声明指针的同时进行初始化赋值:
存储类型 数据类型 * 指针名 = 初始地址;
在声明之后单独使用赋值语句:
指针名 = 地址;
注意: 可以声明指向常量的指针,此时不能通过指针来改变所指对象的值,但指针本身可以改变,可以指向另外ide对象。 可以声明指针类的常量,这时指针本市的值不能被改变
char const name = “Jason”
void类型的指针可以存储任何类型的对象地址:
void *pv = &i;
int *pint = (int *)pv
指针数组:
如果一个数组的每个元素都是指针变量,这个数组就是指针数组。指针数组的每个元素都必须是同一类型的指针。
声明一维指针数组的语法形式:
类型名T *数组名[下标表达式];
int line1[] = {1,2,3};
int line2[] = {1,2,3};
int line3[] = {1,2,3};
int *p_line[3];
p_line[0] = line1;
p_line[1] = line2;
p_line[2] = line3;
cout << p_line[0][1]; //该句输出为line1数组的第二个元素2
用指针作为函数的参数:
如果以指针作为形参,在调用时实参将传递给形参,也就是使用实参和形参指针变量指向同一内存地址。
返回指针的函数:
数据类型 *函数名(参数表){函数体}
指向函数的指针:
函数指针是专门用来存放函数代码首地址的变量。
声明一个函数指针的方法:
数据类型 (*函数指针名) (形参表)
赋值:
函数指针名 = 函数名;
void print_message(float data_to_print);
void (*function_pointer)(float);
function_pointer = print_message;
function_pointer(1.0);
对象指针:
对象指针遵循一般变量指针的各种规则,声明对象指针的一般语法为:
类名 *对象指针名;
使用指针访问对象成员:
对象指针名 -> 成员名
class A; //前行引用声明
classs B{A *a}; //如果改为class B{A a};则错误,因为类A的定义尚不完整
class A{B b};
指向类的非静态成员的指针 指向对象成员的指针使用前夜要先声明,再赋值,然后引用。 声明共有数据成员和函数成员的指针:
类型说明符 类名 :: *指针名;
型说明符 (类名 :: *指针名)(参数表);
赋值:
指针名 = &类名 :: 数据成员名
指针名 = &类名 :: 函数成员名
使用:
对象名.*类成员指针名 或 对象指针名 -> *类成员指针名
(对象名.*类成员指针名)(参数表)或(对象指针名->*类成员指针名)(参数表)
指向类的静态成员的指针 对类的静态成员的访问时不依赖与对象的,因此可以用普通的指针来指向和访问静态成员:
在Point类中定义:
public:
static int countP;
…
创建指针:
int *count = &Point :: countP;
动态内存分配:
new运算符和delete运算符:
在C++程序中建立和删除堆对象使用两个运算赋:new 和 delete
运算符new的功能时动态分配内存,或者称为动态创建堆,返回指针:
int *point; point = new int(1);
运算符delete用来删除由new建立的对象,释放指针所指向的内存空间,格式为: delete 指针名;
Point *p = new Point;
delete p; //其中Point为对象
Point *P = new Point[2];
p[0].Move(1,2);
delete []p;
浅拷贝与深拷贝:
浅拷贝:拷贝的对象的成员指针指向的是同一个内存地址。 深拷贝:为复制的对象重新声明新的成员和函数
字符串:
字符数组存储和处理字符串: 字符数组的声明与赋值:
static char str[8] = {‘p’,’r’,’o’,’g’,’r’,’a’,’m’,’\0’};
static char str[] = “program”;
字符串处理函数:
cstring头文件中:strcat(连接)、strcpy(复制)、strcmp(比较)、strlen(求长度)、strlwr(转换为小写)、strupr(转换为大写)。
string类:
(1)构造函数原型
string();
string(const string &rhs);
string(const char *s);
string(const string &rhs, unsigned int pos, unsigned int n);
string(const char *s, unsigned int n);
string(unsigned int n, char c);
(2)常用成员函数功能简介
string append(const char *s);
string assign(const char *s);
int compare(const string& str) const;
string& insert(unsigned int p0, const char *s);
string substr(unsigned int pos, unsigned int n) const;
unsigned int find(const basic_string& str) const;
unsigned int length() const;
void swap(string& str);