好文档 - 专业文书写作范文服务资料分享网站

6 第6章 数组、指针与字符串(一) 

天下 分享 时间: 加入收藏 我要投稿 点赞

}

for(int i = 0; i < nPoint; i++) { //计算Lxx、Lyy和Lxy

lxx += (points[i].getX() - avgX) * (points[i].getX() - avgX); lyy += (points[i].getY() - avgY) * (points[i].getY() - avgY); lxy += (points[i].getX() - avgX) * (points[i].getY() - avgY); }

cout << \ << endl; cout << \ << lxy / lxx << \; //输出回归系数a

cout << \ << avgY - lxy * avgX / lxx << endl; //输出回归系数b return static_cast(lxy / sqrt(lxx * lyy)); //返回相关系数r

}

int main() { Point p[10] = { Point(6, 10), Point(14, 20), Point(26, 30), Point(33, 40), Point(46, 50), Point(54, 60), Point(67, 70), Point(75, 80), Point(84, 90), Point(100, 100) }; //初始化数据点

float r = lineFit(p, 10); //进行线性回归计算

cout << \ << r << endl; //输出相关系数

return 0; }

运行结果:

6.2 指针

6.2.1 指针的概念、定义和指针运算 内存空间的访问方式 ● 通过变量名访问 ● 通过地址访问

指针的概念 ● 指针:内存地址,用于间接访问内存单元 ● 指针变量:用于存放地址的变量 指针变量的定义 ● 例: static int i; static int* ptr = &i; ● 例: *ptr = 3; 6.2.3 与地址相关的运算——“*”和“&” ● 指针运算符 ● 地址运算符:& 6.2.4 指针的初始化和赋值 6.2.4.1 指针变量的初始化 ● 语法形式 存储类型 数据类型 *指针名=初始地址; ● 例:

int *pa = &a;

● 注意事项

■ 用变量地址作为初值时,该变量必须在指针初始化之前已声明过,且变量类型应与指

针类型一致。

■ 可以用一个已有合法值的指针去初始化另一个指针变量。 ■ 不要用一个内部非静态变量去初始化 static 指针。

6.2.4.2 指针变量的赋值运算 ● 语法形式 指针名=地址

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

● 向指针变量赋的值必须是地址常量或变量,不能是普通整数,例如:

■ 通过地址运算“&”求得已定义的变量和对象的起始地址 ■ 动态内存分配成功时返回的地址

● 例外:整数0可以赋给指针,表示空指针。

● 允许定义或声明指向 void 类型的指针。该指针可以被赋予任何类型对象的地址。 例: void *general; 6.2.4.3 指针空值nullptr

● 以往用0或者NULL去表达空指针的问题:

■ C/C++的NULL宏是个被有很多潜在BUG的宏。因为有的库把其定义成整数0,有

的定义成 (void*)0。在C的时代还好。但是在C++的时代,这就会引发很多问题。

● C++11使用nullptr关键字,是表达更准确,类型安全的空指针 例6-5 指针的定义、赋值与使用

//例6_5 指针的定义、赋值与使用.cpp(P202) #include using namespace std;

int main() {

int i;//定义int型数i

int *ptr = &i;//取i的地址赋给ptr i = 10;

//int型数赋初值

cout << \ << i << endl;//输出int型数的值

cout << \ << *ptr << endl;//输出int型指针所指地址的内容

return 0; }

运行结果:

例6-6 void类型指针的使用

//例6_6 void类型指针的使用源.cpp(P203) #include using namespace std;

int main() {

//! void voidObject; //错,不能声明void类型的变量 void *pv; //对,可以声明void类型的指针 int i = 5;

pv = &i; //void类型指针指向整型变量

int *pint = static_cast(pv);//void类型指针赋值给int类型指针

cout << \ << *pint << endl;

return 0; }

运行结果:

6.2.4.5 指向常量的指针

● 不能通过指向常量的指针改变所指对象的值,但指针本身可以改变,可以指向另外的对象。 ● 例 int a;

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

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

*p1 = 1; //编译时出错,不能通过p1改变所指的对象 6.2.4.6 指针类型的常量

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

int a;

int * const p2 = &a;

p2 = &b; //错误,p2是指针常量,值不能改变 6.2.5 指针的算术运算、关系运算 6.2.5.1 指针类型的算术运算 ● 指针与整数的加减运算 ● 指针++,--运算 指针类型的算术运算 ● 指针p加上或减去n

■ 其意义是指针当前指向位置的前方或后方第n个数据的起始位置。

● 指针的++、--运算

■ 意义是指向下一个或前一个完整数据的起始。

● 运算的结果值取决于指针指向的数据类型,总是指向一个完整数据的起始位置。 ● 当指针指向连续存储的同类型数据时,指针与整数的加减运和自增自减算才有意义。 指针与整数相加的意义

6.2.5.2 指针类型的关系运算

● 指向相同类型数据的指针之间可以进行各种关系运算。

● 指向不同数据类型的指针,以及指针与一般整数变量之间的关系运算是无意义的。 ● 指针可以和零之间进行等于或不等于的关系运算。 例如:p==0或p!=0

99u461vpas6x2111f20r4n7xz5ee5l00biq
领取福利

微信扫码领取福利

微信扫码分享