C++ 指针[转+原创]】的更多相关文章

要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区. 指针的类型 从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型. int *ptr; //指针的类型是int * char *ptr; //指针的类型是char * int **ptr; //指针的类型是 int ** 指针所指向的类型 当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做…
0.前言 这个系列基本上是一月一更到两月一更 今天写一篇关于static的,内含大量干货,做好准备 1.基础知识的回顾 1.1.内存的种类 一般来说,我们之前已经讲过的变量(或者说是内存)可以大体分为这样几种: 全局变量 局部变量,也称为自动变量 使用malloc分配的区域 常量.字符串字面量 这里回顾一下,在C++中,使用const声明的常量是不可改变的,也就是在编译期就确定下来了.因此,即使使用指针更改也不会实际修改到它的值.对于全局变量,const出的值和字符串字面量(即使用""…
讲*和++同时用于指针时提出了这样的问题:将什么解除引用,将什么递增. ]={21.1, 32.8, 23.4, 45.2, 37.4 }; double *pt=arr; //pt指针指向arr[0] 值为 21.1 ++pt; //pt指针指向arr[1] 值为 32.8 前缀运算符的从右到左结合规则意味着 *++p 的含义如下: 先将++应用于pt(因为++位于*的右边)然后将*应用于被递增后的pt-->指针递增 double x=*++pt; //指针+1,指向arr[2] 值为23.4…
C++ Primer Plus 第6版 指针和数组基本等价的原因在于指针算术! 一.指针 ⑴整数变量+1后,其值将增加1: ⑵指针变量+1后,增加的量等于它指向的类型的字节数: ⑶C++将数组名解析为地址: 例如:如果系统对double使用8个字节存储,其数值将增加8,   如果系统对short使用2个字节存储,则指针值将增加2 #include <iostream> int main() { using namespace std; ]={10000.0,20000.0,30000.0};…
最近一直在准备笔试,补补大一大二欠下的课.复习c语言时碰见这么个题:   1 2 3 4 5 int a=248, b=4; int const c=21; const int *d=&a;  int *const e=&b; int const * const f =&a;  请问下列表达式哪些会被编译器禁止? A:*c=32 B:*d=43 C:e=&a D:f=0x321f E:d=&b F:*e=34 下面逐条分析第一行代码不提, 第二行,int const…
目录 变量和内存地址 指针类型 值拷贝和引用拷贝 变量和内存地址 1.每个变量都有内存地址,可以说通过变量来操作对应大小的内存 var a int32 a = 100 fmt.Printf(“%d\n”, a) fmt.Printf(“%p\n”, &a) 注意:通过&符号可以获取变量的地址 指针类型 1.普通变量存储的是对应类型的值,这些类型就叫值类型 var b int32 b = 156 fmt.Printf(“%d\n”, b) fmt.Printf(“%p\n”, &b)…
前言 过了几个月再次更新.最近时间也不多了,快要期中考试了,暂且先少写一点吧. 本文仅在博客园发布,如在其他平台发现均为盗取,请自觉支持正版. 练习题 我们先来看几道题目.如果这几道题都不会的话,就先好好复习我写的前四篇文章吧,这一章是肯定看不懂的. 1.使用指针编写swap函数.(经典例题) 答案 void swap(int *a,int *b){ int t=*a;*a=*b;*b=t; } 2.已知数组a[10][10],交换该数组的第1和第3行. 答案 实际上,二维数组的每一行都是一个单…
前言 好几天没写了,最近网课,事情也比较多,今天多写点东西. 目录 前言 alloca函数 1.简介 2.反汇编看alloca 3.手工调用alloca函数 4.注意事项 alloca函数 1.简介 之前看<30天自制操作系统>的时候,看见了这样一个东西: 没错,这就是alloca函数. 2.反汇编看alloca 现在,我们把VS打开,看看反汇编是如何的: (顺便说一下反汇编的方法,就是下两个断点,如图) 然后左上角就会出现反汇编的页面,点进去 代码如下: #include "std…
要知道什么是智能指针,首先了解什么称为 “资源分配即初始化” what RAII:RAII—Resource Acquisition Is Initialization,即“资源分配即初始化” 在<C++ Primer>这样解释的,“通过定义一个类来封装资源的分配和释放,可以保证正确释放资源” 核心:C++98提供了语言机制:对象([!值语意对象])在超出作用域,,析构函数会被自动调用 [如果构造函数中抛出异常,则不会调用析构函数.只有构造函数正确地执行,构建对象成功,才会调用析构函数]  …
C++虚函数和函数指针一起使用,写起来有点麻烦. 下面贴出一份示例代码,可作参考.(需要支持C++11编译) #include <stdio.h> #include <list> using namespace std; class VirtualWithCallBack { public: using CallBack = void(VirtualWithCallBack::*)(int); public: ; ; }; class VirtualWithCallBackSamp…