C++语法笔记 - 数组 指针与字符串

发布于 2011-09-04 | 更新于 2020-09-20

数组

数组的声明:

数据类型 标识符[常量表达式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);

本文作者: arthinking

本文链接: https://www.itzhai.comc-syntax-notes-array-of-pointers-and-strings.html

版权声明: 版权归作者所有,未经许可不得转载,侵权必究!联系作者请加公众号。

×
IT宅

关注公众号及时获取网站内容更新。