指针变量

指向const对象的指针 const指针

故事扮演 提交于 2020-02-06 04:51:18
1. 指向const对象的指针 指向const对象的指针是一个指针,但是不能通过它来修改它所指向的对象的值。 声明方法: const int *p; const指针对象在初始化后不允许对指针指向的对象的值进行修改,因此不能用一个普通的指针指向一个const 指针对象。否则,如果可以用普通指针修改const指针对象的值,那就失去了const的意义。例如: const int i = 1; int * p = &i; // ERROR! const int *p = &i; // OK! 需要注意的地方: 指向const对象的指针本身不是const类型,所以这个指针可以指向另一个const对象; 指向const对象的指针可以被赋予一个非const对象的地址,但是不能试图通过此指针来修改该对象的值。 2. const指针 const指针就是一个指针,但是它本身是const类型的。所以它初始化后不能再改变它的指向,即不能让它再指 向一个新的对象。 声明方法: int* const p; // 指向非const对象的const指针 const int* const p; // 指向const对象的const指针 const指针可以指向const对象和非const对象,但是两者声明方法不同。使用const指针不可以修改其地址值,但是const指针指向非const对象

指向const对象的指针 const指针

空扰寡人 提交于 2020-02-06 04:50:16
1. 指向const对象的指针 指向const对象的指针是一个指针,但是不能通过它来修改它所指向的对象的值。 声明方法: const int *p; const指针对象在初始化后不允许对指针指向的对象的值进行修改,因此不能用一个普通的指针指向一个const 指针对象。否则,如果可以用普通指针修改const指针对象的值,那就失去了const的意义。例如: const int i = 1; int * p = &i; // ERROR! const int *p = &i; // OK! 需要注意的地方: 指向const对象的指针本身不是const类型,所以这个指针可以指向另一个const对象; 指向const对象的指针可以被赋予一个非const对象的地址,但是不能试图通过此指针来修改该对象的值。 2. const指针 const指针就是一个指针,但是它本身是const类型的。所以它初始化后不能再改变它的指向,即不能让它再指 向一个新的对象。 声明方法: int* const p; // 指向非const对象的const指针 const int* const p; // 指向const对象的const指针 const指针可以指向const对象和非const对象,但是两者声明方法不同。使用const指针不可以修改其地址值,但是const指针指向非const对象

C++知识点

百般思念 提交于 2020-02-06 01:53:21
int **p和int *p有什么区别 int *p表示的是一级指针,表示p所指向的地址里面存放的是一个int类型的值。int **p表示的是二级指针,表示p所指向的地址里面存放的是一个指向int类型的指针。 一级指针存放变量的地址,指向的值是变量的内容。如int* p={1,2,3}, p=数组的首地址,*p=数组的第一个值; 二级指针存放一级指针的地址,指向一级指针。如int*p ={1,2,3}, int**pp=&p,pp=指针p的首地址,*pp=数组的首地址,**pp=数组第一个值1。 指针数组的数组名传递参数对应为指针的指针即二级指针,二维数组的数组名传递参数对应为数组指针即指向一维数组的指针 一级指针通过形参,可以修改实参中指针所指向的地址中的值。修改不了实参中指针所指向的地址。需要借助二级指针才可以。 int *p :一级指针,表示p所指向的地址里面存放的是一个int类型的值 int **p :二级指针,表示p所指向的地址里面存放的是一个指向int类型的指针(即p指向的地址里面存放的是一个指向int的一级指针) 例如: int i=10; //定义了一个 整型变量 int *p=&i; //定义了一个指针指向这个变量 int **p1=&p; //定义了一个二级指针指向p指针 那么取出10的值方式为: printf("i=[%d]\n",*p); printf("i

数组函数指针

时光总嘲笑我的痴心妄想 提交于 2020-02-06 01:11:40
指针函数:int *p(); 指针函数注意不能返回局部变量,只能返回全局变量。 函数指针:int (*p)(); 函数指针的用法如下: 输出结果: 下面是函数指针作为参数: int (*fp)(int,int)它代表的是递两个int类型参数的函数。你看下面calc(add,3,5)就是这么用的 上面这副图里面的 int( select(char op))(int, int) 这个简化简化之后是 int( )(int, int) ,代表一个是函数指针。 select是函数名,该函数有一个char类型的参数,根据上图,这个参数用来进行选择。他有一个返回值,返回值是指针,这个指针就是函数指针,返回整型并且带有两个整型参数的函数指针,函数指针的两个int就是上图中的add和sub函数。 typedef irq_func void(*irq_func)(int irq); irq_func irq_array[332]; //这个代表 C语言允许用户使用 typedef 关键字来定义自己习惯的数据类型名称,eg: typedef int BOOL; BOOL bflag=TRUE; (*irq_func)(int irq) arra[32]; 这就是定义了一个函数指针数组,要把函数的地址存放到一个数组。 上面函数指针定义指针fp作为传递参数传给数组,注意这个数组里面存储的内容也是指针类型。

指针的简单了解

北慕城南 提交于 2020-02-06 01:01:49
指针的简单了解 你们初学指针头就大了,是不是?不要慌,接下来跟我了解下! ** 指针P是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。 说到变量,变量又是什么呢? 变量可以储存计算机的计算结果,变量是通过变量名访问的,变量是可变的。 指针实际上也是变量,它里面存储的实际是内存中的一个地址。举例来说:你如果要去找一个人,那你得知道他在哪?那就得知道他所在的地址,以说指针就是就相当于这个人的地址了。 举个例子: # include <stdio.h> int main ( ) { int a = 3 ; int b = 2 ; int * c ; c = & b ; int * * d ; //二重指针只能指向一重指针,以此类推 d = & c ; printf ( "a的地址=%d\n" , & a ) ; //取变量a的地址 printf ( "b的地址=%d\n" , & b ) ; //取变量b的地址 printf ( "c的地址=%d\n" , & c ) ; //取变量c的地址——指针也是一种变量 printf ( "d的地址=%d\n" , & d ) ; //取变量d的地址——同理 printf (

iOS开发之block解析

故事扮演 提交于 2020-02-05 22:04:57
1. block的本质是一个Objective-C的对象,为什么这么说? 在Objective-C中,runtime会在执行时依据对象的isa指针的指向,来度额定这个对象的类型,也能够觉得一个对象,它具有isa指针,就是一个OC对象 2. 你怎么知道block有isa指针呢,我们能够通过clang命令将来看block的实现 //測试代码 int main(int argc, const char * argv[]) { @autoreleasepool { void(^blk)(void)=^{ NSLog(@"hello lx"); }; } return 0; } 转化后:block语法被编译器转化成了以下的结构 struct __main_block_impl_0 { struct __block_impl impl;//block实现的相关信息 struct __main_block_desc_0* Desc;//block的描写叙述信息 __main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int flags=0) { impl.isa = &_NSConcreteStackBlock; impl.Flags = flags; impl.FuncPtr = fp; Desc = desc; } };

Cracking Digital VLSI Verification Interview 第三章

大憨熊 提交于 2020-02-05 21:49:51
目录 Programming Basics Basic Programming Concepts Object Oriented Programming Concepts UNIX/Linux Programming in C/C++ Programming in PERL Programming Basics Basic Programming Concepts [68] 在任何一种编程语言中,静态(static)变量和自动(automatic)变量,局部(local)变量和全局(global)变量之间有什么区别? 区分这些名词需要两个概念,作用域(scope)和存储持续时间(storage duration),前者定义了在何处可以访问变量,后者定义了在何时可以访问变量。 按照变量的作用域可以区分局部(local)和全局(global)变量。局部变量的作用范围有限,尽在声明它们的代码块中可见。而全局变量在声明后在程序的任何位置都可见。 存储持续时间可以区分自动(automatic)变量和静态(static)变量。静态变量的生命周其一直持续到程序结束,因此可以始终访问。自动变量具有有限的生命周期,只能持续到程序离开定义的块或者作用域为止。 例如:在以下的systemverilog代码中,global_int被声明为类成员,并且在整个类中具有全局作用域,而当取消引用该类的对象时

C++ 大学MOOC 北大课程(郭炜老师)听课整理 第四周

给你一囗甜甜゛ 提交于 2020-02-05 18:59:07
运算符重载基本概念 1)目的是拓展原C程序运算符的作用范围,使程序看起来更加简洁 2)本质是函数,可以称之为运算符函数 3)可以定义为普通函数,也可定义为成员函数 4)把含运算符的表达式转换成函数的调用 5)运算符操作数转换为函数的参数 6)运算符函数可以重载,调用时根据参数类型选择 例如: class complex { public : double real , imag ; complex ( double r = 0.0 , double i = 0.0 ) : real ( r ) , imag ( i ) { } complex operator - ( const complex & r ) ; } ; complex operator + ( const complex & c1 , const complex & c2 ) { return complex ( c1 . real + c2 . real , c1 . imag + c2 . imag ) ; } complex complex :: operator - ( const complex & r ) { return complex ( real - r . real , imag - r . imag ) ; } int main ( ) { complex a ( 4 , 4 ) , b (

小白学Java:RandomAccessFile

杀马特。学长 韩版系。学妹 提交于 2020-02-05 12:17:09
目录 小白学Java:RandomAccessFile 概述 继承与实现 构造器 模式设置 文件指针 操作数据 读取数据 read(byte b[])与read() 追加数据 插入数据 前文传送门: 小白学Java:I/O流 小白学Java:RandomAccessFile 之前我们所学习的所有的流在对数据操作的时候,都是只读或者只写的,使用这些流打开的文件很难进行更新。Java提供了 RandomAccessFile 类, 允许在文件的任意位置上进行读写 。 概述 官方文档的解释是这样的: Instances of this class support both reading and writing to a random access file. 支持对文件进行读写 ,可以认为这是一个双向流。 A random access file behaves like a large array of bytes stored in the file system. 在操作文件的时候,将文件看作一个 大型的字节数组 。 There is a kind of cursor, or index into the implied array, called the file pointer ; input operations read bytes starting at the file

第3章 栈和队列

。_饼干妹妹 提交于 2020-02-05 09:01:48
3.1 栈的定义及抽象数据类型 栈(stack)是一种特殊的线性表,这种表只能在固定的一端进行插入与删除运算。通常称固定插入、删除的一端为栈顶(top),而另一端称为栈底(bottom)。位于栈顶和栈底的元素分别称为顶元和底元。当表中没有元素时,称为空栈。为了与一般的线性表相区别,通常将栈的插入操作称为入栈,将删除操作称为出栈。 线性表S=(a,b,c,d,e) 将S中的元素按照a、b、c、d、e的顺序依次入栈,则出栈的元素顺序为e、d、c、b、a 可以发现,最先进入栈中的元素a最后才出栈,最后入栈的元素e最先被出栈,因为栈的这一特性,故又将其称为后进先出的线性表(lastinfirstout,简称为LIFO)。 3.2 栈的实现 栈的实现既可以采用顺序存储结构也可以采用链式存储结构。采用顺序存储结构实现的栈称为顺序栈,采用链式存储结构实现的栈称为链栈 3.2.1 顺序栈 栈的初始化操作是指按指定的大小为栈动态分配一片连续的存储区,并将该存储区的首地址同时送给栈顶指针top和栈底指针base,表示栈里没有任何元素,此时的栈为空栈。若base的值为NULL时则表明栈不存在。当插入一个新元素时栈顶指针加1,当删除一个元素时栈顶指针减1。栈顶指针top始终比顶元超前一个位置,因此栈满的条件是top-base=stacksize。图3-3所示为栈顶指针和栈中元素的关系。 值得注意的是