数组 指针与字符串

有些部分在C程序设计有总结。点击进入C程序语言设计栏

数组具有一定顺序关系的若干相同类型变量的集合体,组成数组的变量称为该数组的元素。

数组的声明

数据类型 数组名[常量表达式1] [常量表达式2]

例如:int a[10]; 
表示 a 为整型数组,有10个元素:a[0]...a[9]

对象数组:数组的元素不仅可以是基本数据类型,也可以是自定义类型。对象数组的元素是对象,每一个元素不仅有数据成员,而且还有函数成员。

声明:

类名    数组名[元素个数]

访问方法:

通过下标访问

             数组名[下标].成员名

对象数组初始化:

数组中每一个元素对象被创建时,系统都会调用类构造函数初始化该对象。

通过初始化列表赋值。

如果没有为数组元素指定显式初始值,数组元素便使用默认值初始化

数组元素所属类的构造函数:

不声明构造函数,则采用缺省构造函数。

各元素对象的初值要求为相同的值时,可以声明具有默认形参值的构造函数。

各元素对象的初值要求为不同的值时,需要声明带形参的构造函数。

当数组中每一个对象被删除时,系统都要调用一次析构函数。

内存空间的访问方式:

内存空间的访问方式

①  通过变量名访问

②  通过地址访问

地址运算符:&

指针名=地址:

“地址”中存放的数据类型与指针类型必须相符。

向指针变量赋的值必须是地址常量或变量,不能是普通整数。但可以赋值为整数0,表示空指针。

指针的类型是它所指向变量的类型,而不是指针本身数据值的类型,任何一个指针本身的数据值都是unsigned long int型。

允许声明指向 void 类型的指针。该指针可以被赋予任何类型对象的地址。

指向常量的指针:

不能通过指针来改变所指对象的值,但指针本身可以改变,可以指向另外的对象。

int a;

const int *p1 = &a; //p1是指向常量的指针

int b;

p1 = &b; //正确,p1本身的值可以改变

*p1 = 1; //编译时出错,不能通过p1改变所指的对象

 

指针类型的常量:

若声明指针常量,则指针本身的值不能被改变。

例:

int a;

int * const p2 = &a;

p2 = &b;//错误,p2是指针常量,值不能改变

这两个概念比较容易混淆,仔细看加粗加色的标记部分进行了理解.

指针型函数:

当函数的返回值是地址时,该函数就是指针形函数。

声明形式

       数据类型  *函数名(参数表)

        {

          函数体

         }

以指针作为函数参数:

以地址方式传递数据,可以用来返回函数处理结果。

当需要在函数间传递大量数据时,减少开销

实参是数组名时形参可以是指针。

对象指针的一般概念

声明形式

类名  *对象指针名;

Point a(5,10);

Piont *ptr;

ptr=&a;

对象指针是用于存放对象地址的变量

通过指针访问对象成员:

对象指针名->成员名

ptr->getx() 相当于 (*ptr).getx();

this指针:(首先做的是知道有这个this指针,理解不了慢慢来

隐含于每一个类的成员函数中的特殊指针。

明确地指出了成员函数当前所操作的数据所属的对象。

当通过一个对象调用成员函数时,系统先将该对象的地址赋给this指针,然后调用成员 函数,成员函数对对象的数据成员进行操作时,就隐含使用了this指针

 

指向类的非静态成员的指针(类的成员自身也是一些变量、函数或者对象,因此也可以直接将他们的地址存放到一个指针变量中,这样,就可以使指针直接指向对象的成员,进而通过指针访问)

通过指向成员的指针只能访问公有成员

声明指向成员的指针

声明指向公有数据成员的指针

类型说明符  类名::*指针名;

声明指向公有函数成员的指针

类型说明符  (类名::*指针名)(参数表)

动态申请内存操作符 new delete.ewdeleteC++中的运算符,不是库函数,不需要库的支持 )

指向函数成员的指针:

初始化

指针名=&类名::函数成员名;

通过对象名(或对象指针)与成员指针结合来访问函数成员

(对象名.*类成员指针名)(参数表)

或:

(对象指针名->*类成员指针名)(参数表)

指向类的静态成员的指针:

对类的静态成员的访问不依赖于对象

可以用普通的指针来指向和访问静态成员

动态申请内存操作符 new delete.ewdeleteC++中的运算符,不是库函数,不需要库的支持 )

Ø vector创建动态数组:(STL中的内容解决部分算法问题)

将动态数组封装,自动创建和删除

数组下标越界检查

只适用于一种类型的数组

vector动态数组对象的定义:

vector<<font face="宋体">元素类型> 数组对象名(数组长度);

例:vector arr(5)
建立大小为5int数组

对数组元素的引用

与普通数组具有相同形式:

数组对象名 [ 下标表达式 ]

vector数组对象名不表示数组首地址

获得数组长度

size函数

数组对象名.size()

vector应用举例

#include

#include

using namespace std;

 

//计算数组arr中元素的平均值

double average(const vector &arr) {

double sum = 0;

for (unsigned i = 0; i < arr.size(); i++)

sum += arr[i];

return sum / arr.size();

}

int main() {

unsigned n;//unsigned无符号de整型变量

cin >> n; cout << "n = ";

 

 

vector arr(n); //创建数组对象

cout << "Please input " << n << " real numbers:" << endl;

for (unsigned i = 0; i < n; i++)

cin >> arr[i];

 

cout << "Average = " << average(arr) << endl;

return 0;

}

string的用法:

常用构造函数

string(); //缺省构造函数,建立一个长度为0的串

string(const char *s);  //用指针s所指向的字符串常量初始化string类的对象

string(const string& rhs);  //拷贝构造函数

例:

string s1;   //建立一个空字符串

string s2 = abc; //用常量建立一个初值为”abc”的字符串

string s3 = s2;   //执行拷贝构造函数,用s2的值作为s3的初值

常用操作符:

s + t 将串st连接成一个新串

s = t t更新s

s == t 判断st是否相等

s != t 判断st是否不等

s < t 判断s是否小于t(按字典顺序比较)

s <= t 判断s是否小于或等于t (按字典顺序比较)

s > t 判断s是否大于t (按字典顺序比较)

s >= t 判断s是否大于或等于t (按字典顺序比较)

s[i] 访问串中下标为i的字符

例:

string s1 = abc, s2 = def;

string s3 = s1 + s2; //结果是”abcdef

bool s4 = (s1 < s2); //结果是true

char s5 = s2[1]; //结果是’e

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值