Xcode学习C++(二、指针和引用)

一:指针部分

指针是一种变量类型,声明指针变量需要分配独立的存储空间,指针可以为空『void』表示不指向任何对象。

指针里存储的值是一个地址,可以通过这个地址获取和改变所存储变量的值。

指针的类型必须与其所指向变量的类型一致,可以在任何时候改变指向的变量……

————————————————————这些是简单理论的啰嗦,下面说些代码相关的————————————————————————————

定义方式:int *p = &a;  *是指针的标识符,表示p是一个指针类型的变量,这里的变量a,必须是一个int类型。 &运算符可以获取变量的地址

取值方式:(可能有点绕)通过指针获取所指向变量的值是这样做的:*p

int a = 10;
    int *pa = &a;
    cout<<a<<"----"<<*pa<<"----"<<&a<<"----"<<pa<<endl;

输出结果:10----10----0x7fff5fbff89c----0x7fff5fbff89c

可以看到通过*pa获取的值跟a的值一样,a的地址和pa的值也一直,说明指针类型的变量pa的值就是a的地址。

关于指针呢,还有很多东西可以讲,比如指针运算、指向指针的指针、指针方法的指针、指针作为函数参数等等,下次针对指针专门来写写看

二:引用部分

有JAVA或C#等语言基础的人对于引用的认识估计和指针没什么区别,在C++里这两者区别甚大,这也是我学习C++到目前为止跟之前知识体系差距最大的一点。

C++中引用其实就是给变量起一个别名,引用没有自己独立的存储空间,与它引用的变量共享能存,对引用的操作就是对变量的操作(真假美猴王)。

定义方式 int &f = a; &这里又是引用的标识符,f是一个对变量a的引用。f的类型是int那么a的类型也必须是int。

int a = 10;
int &fa = a;
cout<<a<<"----"<<fa<<"----"<<&a<<"----"<<&fa<<endl;

输出结果:10----10----0x7fff5fbff89c----0x7fff5fbff89c

可以看到引用fa的值和地址与变量a的值和地址一致。

引用的使用注意点:定义的时候初始化 int &fa; fa = a;这么先定义后初始化的方式直接报错(引用是没有内存空间的)

时间: 2024-10-14 13:42:14

Xcode学习C++(二、指针和引用)的相关文章

C++学习基础二——指针与引用的区别

一.指针: (1)如果对指针进行解引用操作 赋值,改变的是指针所指向对象的值:(2)如果不对指针进行解引用操作 赋值,则改变的是指针本身的值:(3)const指针本身的值不能修改,但是const指针所指向对象的值能不能修改取决于其所指向对象是否为const类型. 例如: 代码片段1: string s1("some value"); string *sp1 = &s1;//此时s1的值为“some value”,指针sp1指向s1 string s2("another

C++Primer 学习笔记之指针和引用

1.引用概念 引用引入了对象的一个同义词.定义引用的表示方法与定义指针相似,只是用&带起了*. 例如:Point pt1(10,10); Point &pt2 = pt1;//定义pt2为pt1的引用.通过这样的定义,pt1和pt2表示同意对象,需要特别强调的是引用并不是产生对象的副本,仅仅是对象的同义词.因此,当下面的语句执行后: pt1.ofset(2,2); pt1和pt2都具有了(12,12): 引用必须在定义的时候马上初始化,因为它必须是某个东西的同义词.你不能先定义一个引用后才

动态创建二维vector数组+指针与引用的区别

二维vectorvector<vector <int> > ivec(m ,vector<int>(n));    //m*n的二维vector 动态创建m*n的二维vector方法一:vector<vector <int> > ivec;ivec.resize(m);for(int i=0;i<m;i++) ivec[i].resize(n); 方法二:vector<vector <int> > ivec;ivec

【C语言学习】指针再学习(二)之数组的指针

★一维数组 一个整型数据为4个字节.4个字节就是32位,即可以表示2^32个数字 在程序中定义一个数组a[5] = {1,2,3,4,5}; 那么a[0]的地址就是0x00000000,数组名a是数组首元素的地址,a的地址也是0x00000000.a+1则表示的地址是0x00000004,而不是0x00000001.因为1这个值,根据前面的指针a所指向的类型的长度来调整自己的长度.也就是说如果a是指向整型的指针,那么后面加的1也表示4个字节,如果a是指向字符型的指针,那么后面加的1表示1个字节.

C++学习笔记31,指向引用的指针(3)

我们来看一个简单的指向引用的指针的例子. #include <iostream> using namespace std; int main(){ int x=10; int y=20; int &rtx=x; //不要写成了int& *ptrx=&rtx; //因为rtx的本质是一个int int *ptrx=&rtx; *ptrx=15; ptrx=&y; rtx=y; cin.get(); } 依次单步执行:(注意rtx值的变化和ptrx的变化)

C++学习笔记30,指针的引用(2)

可以创建任何类型的引用,包括指针类型. 看一个简单的指针的引用的例子.例如: #include <iostream> using namespace std; int main(){ int x=10; int y=20; int z=30; int* ptx=&x; int* ptz=&z; //指针的引用,声明从右往左看,rtp与&结合, //剩余的符号和左边结合 //引用一旦创建,不能改变其指向,只能改变其值 int* &rtp=ptx; cout<

指针的指针,指针的引用(不是二维指针)

详解c++指针的指针和指针的引用 展示一下使用指针的指针和指针的引用修改传递给方法的指针,以便更好的使用它.(这里说的指针的指针不是一个二维数组) 为什么需要使用它们 当我们把一个指针做为参数传一个方法时,其实是把指针的复本传递给了方法,也可以说传递指针是指针的值传递. 如果我们在方法内部修改指针会出现问题,在方法里做修改只是修改的指针的copy而不是指针本身,原来的指针还保留着原来 的值.我们用下边的代码说明一下问题: int m_value = 1; void func(int *p) {

C语言学习笔记 (002) - C++中引用和指针的区别(转载)

下面用通俗易懂的话来概述一下: 指针-对于一个类型T,T*就是指向T的指针类型,也即一个T*类型的变量能够保存一个T对象的地址,而类型T是可以加一些限定词的,如const.volatile等等.见下图,所示指针的含义: 引用-引用是一个对象的别名,主要用于函数参数和返回值类型,符号X&表示X类型的引用.见下图,所示引用的含义: 2.指针和引用的区别 首先,引用不可以为空,但指针可以为空.前面也说过了引用是对象的别名,引用为空--对象都不存在,怎么可能有别名!故定义一个引用的时候,必须初始化.因此

C++学习笔记----2.4 C++引用在本质上是什么,它和指针到底有什么区别

从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量). 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的: 指针传递参数本质上是值传递的方式,它所传递的是一个地址值.值传递过程中,被调

指针与引用的二三事

指针:一个储存一个地址的整型对象,即一个整数,以指针所存地址开头,指针类型对应类型那么大(如char指针对应内存大小为1个字节)的那块内存,我们称作指针所指内存,编译器根据指针的类型操作指针指向内存. 引用:作为一个对象的别名,对引用的所以操作均可看做对其绑定对象的操作,并且引用在定义时必须初始化,且此后不能再改变它. 对于指针,有两种const. 1:constant pointer 常量指针,即指针本身即为常量.也就是不可以修改指针本身,指针像引用一样,初始化以后,从一而终. 2:point