c++ 指针(不断更新)

c++指针只能说博大精深,在用的时候感觉好晕

1.指针类型转换


/*
在指针的强制类型转换:ptr1=(TYPE*)ptr2中,如果sizeof(ptr2的类型)大于sizeof(ptr1的类型),
那么在使用指针ptr1来访问ptr2所指向的存储区时是安全的。如果sizeof(ptr2的类型)小于sizeof(ptr1的类型),
那么在使用指针ptr1来访问ptr2所指向的存储区时是不安全的
*/
#include <iostream>
using namespace std;
void fun(char*s)
{
char c;
c=*(s+3);*(s+3)=*(s+0);*(s+0)=c;
c=*(s+2);*(s+2)=*(s+1);*(s+1)=c;
}
int main()
{
int a=125;
fun((char*)&a);
cout << a;
getchar();
}

这个程序是实现整形的字节内容转换


#include <iostream>
using namespace std;

struct MyStruct
{
bool b;
};
int main()
{
void* ptr = new bool;
cout << sizeof(MyStruct);
MyStruct* p = (MyStruct*)ptr;
p->b = true;
getchar();
}

对于这个例子MyStruct的大小为1,所以满足条件,只含有虚函数的类大小为4,因为有虚指针,任何指针的大小都是4,空类大小为1,这个是c++规定的,因为系统要存储这个类型,大小为0就没法存储

2.NULL指针


#include <iostream>
using namespace std;

int main()
{
char* p = NULL;//空指针的值是0x00000000,NULL主要是内存删除之后赋成null,防止野指针
p = new char(‘a‘);//我也为空指针什么都不能操作,这个是给p重新分配一块内存
cout << *p << endl;
delete p;
*p = ‘c‘;//p野指针,虽然内存删除了,但指针还是指向那个位置
p = NULL;
*p = ‘b‘;//p是空指针,对空指针操作直接报错,所以在在指针删除之后置为NULL,防止对野指针的误操作。

getchar();
}

c++ 指针(不断更新),布布扣,bubuko.com

时间: 2024-10-11 01:37:26

c++ 指针(不断更新)的相关文章

winphone 中的指针和手势事件

注意  有关这些主题的最新概述,请参阅指针事件和手势事件主题. 小心  W3C 指针事件规范自从在 Internet Explorer 10 中实施以来,已经经历了多次修订.此外,截止到 Internet Explorer 11,已弃用了指针事件 API 上的 MS 供应商前缀.请参阅指针事件更新以了解更改和兼容性最佳做法的摘要. Internet Explorer 10 和适用于 Windows 8 的使用 JavaScript 的 Windows 应用商店应用在 Web 平台中引入了对触控和

垃圾回收算法(5)分代回收

分代垃圾回收,基于的是“大部分的对象,在生成后马上就会变成垃圾”这一经验上的事实为设计出发点.此前讨论过基于引事实的另一个垃圾回收算法,引用计数出的一些优化思路. 分代的关键是: 给对象记录下一个age,随着每一次垃圾回收,这个age会增加: 给不同age的对象分配不同的堆内内存空间,称为某一代: 对某一代的空间,有适合其的垃圾回收算法: 对每代进行不同垃圾回收,一般会需要一个额外的信息:即每代中对象被其他代中对象引用的信息.这个引用信息对于当前代来说,扮演与"root"一样的角色,也

Swift和C混合Socket编程实现简单的ping命令

这个是用Mac下的Network Utility工具实现ping命令,用Wireshark抓取的ICMP数据包: 发送ICMP数据包内容 接受ICMP数据包内容 一.icmp结构 要真正了解ping命令实现原理,就要了解ping命令所使用到的TCP/IP协议.ICMP(Internet Control Message,网际控制报文协议)是为网关和目标主机而提供的一种差错控制机制,使它们在遇到差错时能把错误报告给报文源发方.ICMP协议是IP层的 一个协议,但是由于差错报告在发送给报文源发方时可能

并查集 (Union-Find Sets)及其应用

定义 并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题.常常在使用中以森林来表示. 集就是让每个元素构成一个单元素的集合,也就是按一定顺序将属于同一组的元素所在的集合合并. 主要操作 初始化 把每个点所在集合初始化为其自身. 通常来说,这个步骤在每次使用该数据结构时只需要执行一次,无论何种实现方式,时间复杂度均为O(N). 查找 查找元素所在的集合,即根节点. 合并 将两个元素所在的集合合并为一个集合. 通常来说,合并之前,应先判断两个元素是否属于

栈java实现

这几天,过得挺充实的,每天都在不停的上课,早上很早就起来去跑步,晚上到图书馆看书.一边紧张的学习,一边在默默的备战软考.最近还接手了一个公司官网的建设.这是我在川信最后的一个完整学期了,每件事我都要认真去做.就算会有失落,会有失败,会有不甘,也不轻言放弃. 刚刚下去跑了几圈,吹着夜晚的冷风,在操场狂奔.汗水湿透了全身,滴在镜片上,我快看不清了远方.想起很多事来,来川信的两年,参加了两次运动会,这是第三次,且每次都是长跑,我享受着这种超越自己的感觉.长跑远没有结束,我一直在这条路上. 对于时间的安

浅谈linux读写同步机制RCU

RCU是linux系统的一种读写同步机制,说到底他也是一种内核同步的手段,本问就RCU概率和实现机制,给出笔者的理解. [RCU概率] 我们先看下内核文档中对RCU的定义: RCU is a synchronization mechanism that was added to the Linux kernel during the 2.5 development effort that is optimized for read-mostly situations. 翻译:RCU是在2.5版本

Java 并发编程之性能和可伸缩性

对性能的思考 对于一个给定的操作,通常会缺乏某一种特定的资源限制它的性能,就像常说的短板理论,比如CPU时钟周期.内存.网络带宽.I/O带宽.数据库请求(这个应该是现在高并发的一个瓶颈).磁盘空间等等.当操作因为某种资源而受到限制时,我们就以资源+"密集型"命名这个操作,如CPU密集型,数据库密集型.. 相对于单线程来说,多线程在多个CPU存在时,能更好的发挥它的优势,不过如果是单核的情况下会花费更多的开销,比如.线程之间的协调,增加的上下文切换.线程的创建和销毁.以及线程的调度.如果

python源码分析----内存分配(2)

早就应该写部分的内容了....最近比较负能量...伤不起啊.. 上一篇说到了,在python的内存分配中两个非常重要的方法:PyObject_Malloc和PyObject_Free 在具体的来这两个方法之前,先要看看别的一些东西 //这里用usedpool构成了一个双向链表 //只用了两个指针就搞定了..我擦... //这里将保存的地址减去了两个指针的大小,那么根据pool结构体的定义,那么将地址加上两个指针,正好就是next,加上3个指针正好就是prev //比较的巧妙 #define PT

直接Stream Video到GPU Texture 内存

在某些场合需要快速的将Video Frame stream到GPU texture, 比如要使用GPU渲染从相机过来的帧数据.这时候就可以将数据直接写入pixel unpack buffer object. Pixel unpack buffer object OpenGL 支持几种buffer objects, 其中用的最多的大概就是vertex buffer object (VBO) 用来存储顶点相关数据. 创建和绑定buffer object的函数: void glGenBuffers(G