c++指针学习
来源:互联网 发布:按键精灵 for mac 编辑:程序博客网 时间:2024/06/06 04:33
c++指针学习
eg: int var1;
&var1 表示var1的地址。
int var=20;
int *ip; //指针变量的声明
ip=&var; //指针变量中存储var的地址
cout<<ip<<endl; //指针变量中存储的地址 0xbfc601ac
cout<<*ip<<endl; //20,访问指针中地址的值
int var[MAX]={10,100,200};
int *ptr[MAX]; //把 ptr 声明为一个数组,由 MAX 个整数指针组成。因此,ptr 中的每个元素,都是一个指向 int 值的指针。
ptr[i] = &var[i]; // 赋值为整数的地址
cout<<*ptr[i]<<endl; // 10 100 200
指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。通常,一个指针包含一个变量的地址。
当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。
一个指向指针的指针变量必须如下声明,即在变量名前放置两个星号。 int **var;
当一个目标值被一个指针间接指向到另一个指针时,访问这个值需要使用两个星号运算符
int var;
int *ptr;
int **pptr;
var = 3000;
// 获取 var 的地址
ptr = &var;
// 使用运算符 & 获取 ptr 的地址
pptr = &ptr;
// 使用 pptr 获取值
cout << "Value of var :" << var << endl; //3000
cout << "Value available at *ptr :" << *ptr << endl; //ptr指针的值,3000
cout << "Value available at **pptr :" << **pptr << endl; //3000
声明函数参数为指针类型即可。
double getAverage(int *arr, int size); //arr表示一个数组
数组名是一个指向数组中的第一个元素的常量指针。
double *p;
double balance[10]; //balance 是一个指向 &balance[0] 的指针,即数组 balance 的第一个元素的地址
p=balance; // p 赋值为 balance 的第一个元素的地址
使用数组名作为常量指针是合法的,反之亦然。因此,*(balance + 4) 是一种访问 balance[4] 数据的合法方式。
把第一个元素的地址存储在 p 中,您就可以使用 *p、*(p+1)、*(p+2) 等来访问数组元素。
C++ 不允许向函数传递一个完整的数组作为参数,但是,您可以通过指定不带索引的数组名来传递一个指向数组的指针。
在函数中传递一个一维数组作为参数,您必须以下面三种方式来声明函数形式参数
void myFunction(int *param){}
void myFunction(int param[]){}
void myFunction(int param[10]){}
从函数返回一个一维数组,您必须声明一个返回指针的函数
int * myFunction() {}
引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。
引用很容易与指针混淆,它们之间有三个主要的不同:
不存在空引用。引用必须连接到一块合法的内存。
一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
引用必须在创建时被初始化。指针可以在任何时间被初始化。
int i=17;
int& r=i; //&读作引用,r 是一个初始化为 i 的整型引用
cout<<i<<endl; //5
cout<<r<<endl; //5
引用通常用于函数参数列表和函数返回值。
把引用作为参数。 C++ 支持把引用作为参数传给函数,这比传一般的参数更安全
#include <iostream>using namespace std;// 函数声明void swap(int& x, int& y);int main (){ // 局部变量声明 int a = 100; int b = 200; cout << "交换前,a 的值:" << a << endl; cout << "交换前,b 的值:" << b << endl; /* 调用函数来交换值 */ swap(a,b); cout << "交换后,a 的值:" << a << endl; //200 cout << "交换后,b 的值:" << b << endl; //100 return 0;}void swap(int& x, int& y){ int temp; temp = x; /* 保存地址 x 的值 */ x = y; /* 把 y 赋值给 x */ y = temp; /* 把 x 赋值给 y */ return;}
阅读全文
0 0
- C 指针的学习
- C和指针学习
- [C学习]指针初识
- C指针学习记录
- 学习C语言指针
- C和指针学习
- c指针学习
- C 指针学习笔记
- c 指针学习记录
- C和指针学习
- C语言指针学习
- c基础学习 - 指针
- 学习《C和指针》
- 《C和指针》学习
- C指针学习笔记
- c 结构指针学习
- C语言指针学习
- C指针学习笔记
- 筛选出list中出现次数最多的元素以及出现的次数
- java va中工厂模式( 静态工厂模式、工厂方法模式、抽象工厂模式)的介绍以及简单例子
- MyEclipse10视图server中的tomcat重启不见了的解决办法
- Github连接不上:Permission denied (publickey).fatal: Could not read from remote repository.
- 定时任务调度工具之Timer(二)
- c++指针学习
- JavaScript中Cookie使用
- Modbus名词解释(功能码、输入保持寄存器、数据地址、错误代码)
- BFS Nightmare
- java多线程实现
- keras on spark
- 开源漏洞扫描器合集
- URLConnection 请求头和返回值编码
- poj 2253 Frogger(floyd变形)