很多编程语言都以 “没有指针” 作为自己的优势来宣传,然而,对于C语言,指针却是与生俱来的。那么,什么是指针,为什么大家都想避开指针。很简单, 指针就是地址,当一个地址作为一个变量存在时,它就被叫做指针,该变量的类型,自然就是指针类型。指针的作用就是,给出一个指针,取出该指针指向地址处的值。为了理解本质,我们从计算机模型说起。宏观看来,计算机可以分为两类:存 …
结构体指针
浅析weak指针的实现oc中weak指针主要用于打破循环或者防止循环引用的发生,应用场景还是很广泛的。那么被weak修饰的指针与被指向的对象在底层的运作机制究竟怎样的呢?为什么在对象释放销毁时weak指针能自动置为nil,从而避免了野指针的错误?weak指针实现原理当对象被一个weak指针引用时,底层的实现原理就是:不对被引用的对象进行retain,而是利用 …
虽说指针是C语言中比较复杂的语法,但是确实非常好用,因此我写过不少文章讨论C语言中的指针,相信对初学者理解指针有一定的帮助。事实上,的确有读者私信我说看了这些文章,“总算不再畏惧指针了”。不过他同时也问了一个问题:C语言有“不透明指针(opaque pointer)”吗?要是有的话,什么样的指针才是不透明指针呢,有什么用呢?C语言的“不透明指针”坦诚地说,我 …
理解数据的存储和指针,关键在于了解其地址如何偏移及指针如何移动。1 按字节移动string.h中有一串内存操作函数,函数参数和返回值的类型为void*,其实现按字节移动来操作(char的大小刚好是1个字节,char操作就是字节操作)。void * memmove ( void * dst, const void * src, size_t count){vo …
C 语言本质上是传值调用(call by value)的语言,因为函数的形参都是局部变量,它们通过传入的实参进行初始化。C 语言的优点是,只要表达式的类型适当,就可以当作实参。另一方面,缺点是在启用函数时,如需要复制大数据对象,则运行成本很高。而且,函数没有办法修改原始变量(调用者的变量),只能修改原始变量的复制版本。然而,如果函数的实参是变量的地址,那么函 …
目录一、time包1. time包的基本使用2. format 格式化时间3. unix 时间戳相互转换二、日期函数1. 字符串转时间戳2. 时间间隔常量3. 实践操作函数:Add、Sub、Equal、Befor、After4. 定时器:Ticker、Sleep三、指针1. 定义指针2. 指针取值3. 指针传值4. new make函数一、time包1. t …
起因今天学习一下Rust中的指针.原生指针原生指针 *const (不可变) 和 *mut(可变)let mut x = 32;lety = &mut x; 引用unsafe {*y =64;通过原生指针 修改值}引用引用通过&和&mutlet a = 100;let b = &a;println!("a={}", b);智能指针智能指针最早 …
POINTER说明POINTER 类型的参数是一个可指向特定变量的指针。它在存储器中占用 6 个字节(48 位),可能包含以下变量信息:数据块编号或 0(若数据块中没有存储数据)CPU 中的存储区变量地址下图显示了 POINTER 参数类型的结构:指针类型根据相关信息,可以使用 POINTER 参数类型声明以下四种类型的指针:内部区域指针:内部区域指针存储变 …
介绍在我们讨论什么是智能指针之前,让我们试着为指针是什么设定一个明确的基础,编程中的指针通常是指向另一条数据位置的数据,例如,您的家庭地址指向您居住的地方。智能指针就像常规指针,直接指向数据的位置,但具有额外的功能,包括将多个所有者分配到一个值、内部可变性等。Ps.&在Rust中引用也可以被视为指针,因为它指向一个数据的引用。在本文中,我们将研究Rust中常 …
指针是C语言中的精华,也是一把双刃剑,关系到安全和效率。1 系统内存布局2 存储变量的内存地址3 指针定义:变量,地址,类型(宽度)4 指针声明5 &与*运算符6 定义指针与解引用7 指针初始化8 指针指向类型长度计算:sizeof(*p)9 void* 类型指针10 指针应用:判断系统大小端11 指针加减运算12 常量指针与指针常量13 数组名是一cons …