c++入门教程(十五)
来源:互联网 发布:php compact 编辑:程序博客网 时间:2024/05/29 18:48
好久没敲黑板了 前方高能预警:今天的内容可能有些绕,但是,蛮有用的。至少,好玩。
前面我们说过,声明一个变量,相当于在内存中要了一块空间。不同类型的变量要的空间的大小是不一样的。既然有了空间,那么,它就有个开始的位置(比如学校就有门牌号)。我们用符号 '&' 来获取一个变量的地址。用法如下 &要获取首地址的变量名。例如
int b;&b;这样子我们就拿到了变量b代表的空间的起始地址(首地址)了。
然后我们用一种新的类型的变量来存放这个 “位置” 这个新的猥琐的类型叫做指针类型,记作 * (这里的*不是乘号的意思)。具体用法和其它类型一样 * 变量名 例如
* a;
现在,我们拿到了这块空间的的首地址,但是,想要根据空间的地址拿到这块空间里的东西还需要知道这块空间的大小(也就是这块空间放的是哪种变量)。
所以,声明一个完整的指针类型的方式 类似 要通过地址获取的空间的类型 * 指针变量名; 例如:
int b = 0;int * p;p = &b;注意: 上面的要通过地址获取的空间的类型可以int,char 这种基本数据类型,也可以是自己使用struct定义的自定义类型。例如:
#include<iostream>using namespace std;struct student{int age;char sex;};int main(){student stu1;student * stupointer = &stu1;return 0;}
现在,我们拿到了一个变脸个的首地址了,也知道这货有多大了,于是,我们要通过这个纪录了其它变量首地址的变量去获取这块空间里的内容了(这里开始绕了)
通过一个指针类型的变量拿到 对应空间里的内容的语法如下 *指针类型变量 (注意,这里的* 和上面那个用来声明指针类型变量的*是不一样的。这里的* 是用来通过地址取对应数据的) 然后,这个时候 *指针类型变量 的用法就和它所指向的类型的变量的用法是相同的了。
于是,我们先来一个简单的例子
#include<iostream>using namespace std;int main(){int a = 30;int * b = &a;cout<<"a = "<<a<<endl;cout<<"*b = "<<*b<<endl;return 0;}结果如下
我们不仅能通过指针变量得到空间里的值,还可以通过指针变量修改空间里的值
#include<iostream>using namespace std;int main(){int a = 30;int * b = &a;cout<<"修改前:"<<endl;cout<<"a = "<<a<<endl;cout<<"*b = "<<*b<<endl<<endl<<endl<<endl;*b = 66;cout<<"修改后:"<<endl;cout<<"a = "<<a<<endl;cout<<"*b = "<<*b<<endl;return 0;}结果如下
现在来试试用指针来操作自定义类型的变量
#include<iostream>using namespace std;struct student{int age;char sex;};int main(){student stu1;student * stupointer = &stu1;(*stupointer).age = 3;cout<<"stu.age = "<<stu1.age<<endl;cout<<"(*stupointer).age = "<<(*stupointer).age<<endl;//下面是简便的用法 指向结构体变量的 指针类型变量-〉xxxx 获取它指向的变量的xxxx属性//例如stu1.age 等同于 (*stupointer).age 等同于 stupointer->agestupointer->age = 6;cout<<"stu.age = "<<stu1.age<<endl;cout<<"(*stupointer).age = "<<(*stupointer).age<<endl;cout<<"stupointer->age = "<<stupointer->age<<endl;return 0;}
结果如下
阅读全文
0 0
- C语言入门教程 (十五) 指针概念
- c++入门教程(十五)
- ReportStudio入门教程(十五) - 列表显示行号
- ExtJs 入门教程十五[列模型 :ColumnModel]
- OPENCV入门教程十五:bilateralFilter双边平滑
- 十五 v4l2_dev.c浅析
- Java语言入门教程(十五):抽象类与抽象方法
- ExtJs 入门教程十五[员工信息表Demo:AddUser]
- RabbitMQ入门教程(十五):普通集群和镜像集群
- [C语言学习]作业十五
- C#-二十五问总结
- C核心技术手册(十五)
- c语言学习笔记十五
- C语言预处理器(十五)
- Visual C++/MFC入门教程
- Visual C++/MFC入门教程
- Visual C++/MFC入门教程
- Visual C++/MFC入门教程
- P1583 魔法照片
- 搜狐[编程题] 袋鼠过河.一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个
- 4-1 求奇数和
- java学习_常用API
- 【网络流24题】星际转移(分层图+枚举)
- c++入门教程(十五)
- 异常处理,abort(),exit(),返回错误码
- tf.segment_sum和tf.unsorted_segment_sum实例
- 信息标记与提取方法
- 【拜小白opencv】24-半阈值化操作
- 4-2 展开式求和
- Mina入门-二
- 复习java
- 台大概率第一周笔记