您的位置:首页 > 编程语言 > C语言/C++

《C++大学教程》学习笔记(八)

2018-02-12 00:40 225 查看

《C++大学教程》学习笔记(八)

1.指针基本

向函数传递参数有三种方式:

按值传递

使用引用参数的按引用传递

使用指针参数的按引用传递

用const修饰指针,这里有三种情况要区分:

const int * ptr;        //指向const数据的非const指针,ptr可以改变
int * const ptr;        //指向非const数据的const指针,*ptr可以改变
const int * const ptr;  //指向const数据的constant指针,什么都不能变


sizeof函数应用到一个数组名和指向该数组的指针时会得到的不同的结果。当应用到内置数组名时,它返回这个数组的总字节数;当应用到指向该数组的指针时则只会返回这个指针的字节数(??略有疑惑)。

通过下面这段程序可以了解这之间的不同:

#include <iostream>
using namespace std;

size_t getSize(double * );

int main(){

double n[20];
double * nPtr = nullptr;        //一个指针应该初始化为nullptr或一个具体地址
nPtr = n;

cout << sizeof(n) << endl
<< sizeof(nPtr) << endl
<< getSize(n) << endl;

return 0;
}

size_t getSize(double * ptr){
return sizeof(ptr);
}


运行结果是:



好像说不出个所以然。。。

2指针运算及数组

当一个指针加/减一个整数时(包括自增自减),它会加/减去这个整数与该整数指向对象的字节大小的乘积。

而两个数组指针相减,举个例子:如果p1地址3000,p2地址3008,假设都是指向int数组的指针,那么当执行

x = p2 - p1;


时,x的值为2。这个算式把p1到p2的内置数组元素的个数赋值给x,也就是

(3008 - 3000)B / 4B = 2,由此也能联想到这种情况下主存是按字节(B)编址的。

对于数组与指针:

int b[5];
int *bPtr;


当我们执行

bPtr = b;
//或者
bPtr = &b[0];


之后,如果想要访问数组的元素,除了b[3]这样之外

通过

*( bPtr + 3 );
//或者
bPtr[3];


也能访问。

3.基于指针的字符串

比较传统的基于指针(数组)的字符串,有四种声明方式:

char color[] = "blue";
char color[] = {"blue"};
char color[] = {'b','l','u','e','\0'};
const char *colorPtr = "blue";         //指针式


这种方式使用起来比较麻烦,既然C++中提供了string,那非特殊需要就不要用基于指针的字符串了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: