jokerbrk

导航

【C++中的指针,地址,引用】如何去识别这些概念?(1)

引入

以前很常听到C++中的指针怎么怎么的。

后来经过与其他高级语言的对比发现,如C#,python等只是在语言表示上面屏蔽了c++这种语法其本质还是不变,

这也就是说万变不离其宗,可见计算机原理知识在编程中的重要性

解释对象

值(value),地址(address),指针(pointer)

 

正文

1.指针和值类型之间的渊源(指向变量的指针)

 

好比一个教师里有很多学生,他们的座位不固定,但其中有些人有专门的任务要去监督一个人或者一群人。

 

 有天班上分配了监督的任务:这次坐在0号位置的同学就专门记录坐在6位置的同学,

  老师问坐在0号位置的同学:你记录哪个位置?

    0号位置的同学回答说:我记录6号位置。(也就是p=0x6)

  老师又问:六号位置坐了谁?

    0号位置的学生答曰:我发现谁也没有坐(0x6座位默认初始化为0,这里*p=0)

#include<iostream>
#include<string.h>
#include<stdio.h>
#include<ctime>
#include <cstdlib>
using namespace std;
int main()
{
    int a;//我就是那个6号位置坐的人,但你不知到我是谁,我随时有可能变
    int *p;//我是记录者
    p=&a;//我是记录者,给我分配了记录6号位置并改变六号位置坐的人的权限
    cout<<"我记录"<<p<<"位置,那里坐了"<<*p<<endl;//老师询问我记录的位置的名字和这个位置有谁在
} 

 

2.指针与引用类型的渊源(指向数组的指针)

 

我是一个指针,有时候我的任务很重,要监督一大片位置上坐了谁。

 

 同样的有

    int arr[]={5,6,7,8};
    int *pp;
    pp=arr;
    cout<<pp<<endl;
    cout<<arr<<endl;
    cout<<"我记录"<<pp<<"开始的"<<sizeof(arr)/sizeof(int)<<"个位置"<<endl;
    cout<<"我是被记录的学生,坐在"<<arr<<"位置上,我的值是"<<*arr<<"我后面的人的值是"<<*(arr+1)<<endl;//我是被监督的但是我更像一个组长,监督者我的组员

 

 

我们也知道数组是一个引用类型,引用类型就是一个隐藏的指针,它被分配了一个组长的权限,所以可以通过它访问和改变任何不超过它长度范围的内存单元

于是就有了

 

 的关系,只不过他的方式有些特殊,地址是 arr, arr+1 ,arr +2 值是 *arr,*(arr+1),*(arr+2)....呵呵

也不要忘了正常定义的指针的,地址是 p,p++,p++,p++(类似于python中的iter()迭代器,一言不合就iter.Next()),值是*p,*(p++),*(p++)

结束语

 这只是一个班集体内的分配关系

而如果说要去监督其它班级的位置他们又会怎么做呢?这就是需要掌握的与其它函数之间的指针作为参数,返回值,等情况

为了控制指针不要做没有分配的监督任务还要加上我们的修饰符,。。全局等等,可谓是要沿用到很多东西不明白它为什么存在的东西。。。。。

posted on 2020-08-25 01:02  jokerbrk  阅读(374)  评论(0编辑  收藏  举报