C/C++指针从0到99(详解)

简介: C/C++指针从0到99(详解)



一,指针的基础理解

      在电脑中所有的数据都会被存储,我们大多数时候只需要一部分数据,那我们如何准确找到那些数据呢,这个时候就需要一些编号来找到数据,像我们身份证上的编号一样,在计算机中每个字节都有自己的编号,而指针是用来存储这些地址编号的。

二,指针的基本使用

     一级指针的结构是:(类型 ) + (* )+(名称),例如:int * pa;这个就是一个int 类型的一级指针,对其解引用可以获得指针指向空间里面的内容,二级指针则是存储一级指针的地址,例如:int * *paa =&pa;对其解引用一次可以获得一级指针的指向的内容,在解引用一次可以获得一级指针指向的内容,以此类推可以理解三级,四级指针。

三,为什么要用指针

    首先指针最广泛的用法是在函数传参的时候,众所周知,一遍数据类型在传参数时,大部分是拷贝,函数中的改变无法影响其他函数中的实参,而因为指针和其他的不一样,指针是直至本质(地址),只要将实参的地址传过去,通过形参的指针找到地址进行,操作可以避免因为拷贝导致的无法改变问题。其次,指针能对数据进行更加精准的操作,能够进行通过强制转化进行字节上的操作。指针也能简化大量的代码量,这些优点在我们日后进行使用时感觉到的。还有很多优点我就不一一列举了,大家有兴趣可以网上找资料。

四,指针与数组的联系

       数组和指针的联系可谓是千丝万缕,数组的实质就是指针,数组的名称就是第一个元素的地址,指针也能用   [ ] 这种数组的形式表示,数组也能用指针  *(arr+i)的形式表示。接下来我展示一些数组和指针的转化和对应关系

int *arr              =               int arr[ ]

int (*p)[   ]         =              int  arr[ ] [ ]

五,指针的拓展使用

1)指针数组

结构:int *p[ ]

指针数组的实质还是一个数组,它的用途可以用来存储指针,方便使用,例如

int *pa=NULL;
int *pb=NULL;
int *pc=NULL;
int *arr[]={pa,pb,pc};
2)数组指针

结构:int (*p)[ ]

数组指针的本质则是一个指针,看起来结构和指针数组相同,但是不要忘记【 】和  *  优先级不同,数组指针的  p  是先与【】结合的,而指针数组是先与  *  结合的。指针数组可以存储二维数组等多位数组的地址,并且很方便的拿出,例如:

3)函数指针·

结构:返回类型  (*p)  (参数 1,参数 2);

实例:int (*add)(int a,int b)  =add ;(add代表加法函数,函数名就是函数的地址)

函数指针 有什么用呢,函数指针能简化很多代码量,让程序变得更加健壮,你可以思考,用一个函数指针模板只要返回值和参数相同就可以适应功能不同的函数,大量减少重复代码。

六,sizeof 和stelen 的补充

说先要认识到sizeof 和 strlen 的差别,sizeof 是只看()里面的类型,不会进入内存计算,如  int,数组则是 int [  10]。而 strlen 则是进入给的地址内存,找到"\0",如何统计字节数。

如果sizeof()里面的是指针,则结果是4||8,因为编译环境不同,指针大小不同,而strlen 里面只能放地址,别人可能会非法访问

相关文章
|
12天前
|
存储 安全 编译器
在 C++中,引用和指针的区别
在C++中,引用和指针都是用于间接访问对象的工具,但它们有显著区别。引用是对象的别名,必须在定义时初始化且不可重新绑定;指针是一个变量,可以指向不同对象,也可为空。引用更安全,指针更灵活。
|
30天前
|
存储 C++
c++的指针完整教程
本文提供了一个全面的C++指针教程,包括指针的声明与初始化、访问指针指向的值、指针运算、指针与函数的关系、动态内存分配,以及不同类型指针(如一级指针、二级指针、整型指针、字符指针、数组指针、函数指针、成员指针、void指针)的介绍,还提到了不同位数机器上指针大小的差异。
28 1
|
1月前
|
存储 编译器 C语言
C++入门2——类与对象1(类的定义和this指针)
C++入门2——类与对象1(类的定义和this指针)
22 2
|
1月前
|
存储 安全 编译器
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(一)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
1月前
|
存储 C++ 索引
C++函数指针详解
【10月更文挑战第3天】本文介绍了C++中的函数指针概念、定义与应用。函数指针是一种指向函数的特殊指针,其类型取决于函数的返回值与参数类型。定义函数指针需指定返回类型和参数列表,如 `int (*funcPtr)(int, int);`。通过赋值函数名给指针,即可调用该函数,支持两种调用格式:`(*funcPtr)(参数)` 和 `funcPtr(参数)`。函数指针还可作为参数传递给其他函数,增强程序灵活性。此外,也可创建函数指针数组,存储多个函数指针。
|
2月前
|
编译器 C++
【C++核心】指针和引用案例详解
这篇文章详细讲解了C++中指针和引用的概念、使用场景和操作技巧,包括指针的定义、指针与数组、指针与函数的关系,以及引用的基本使用、注意事项和作为函数参数和返回值的用法。
35 3
|
1月前
|
算法 C++
【算法】双指针+二分(C/C++
【算法】双指针+二分(C/C++
|
1月前
|
存储 编译器 程序员
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(二)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
2月前
|
C++
C++(十八)Smart Pointer 智能指针简介
智能指针是C++中用于管理动态分配内存的一种机制,通过自动释放不再使用的内存来防止内存泄漏。`auto_ptr`是早期的一种实现,但已被`shared_ptr`和`weak_ptr`取代。这些智能指针基于RAII(Resource Acquisition Is Initialization)原则,即资源获取即初始化。RAII确保对象在其生命周期结束时自动释放资源。通过重载`*`和`->`运算符,可以方便地访问和操作智能指针所指向的对象。
|
2月前
|
C++
C++(九)this指针
`this`指针是系统在创建对象时默认生成的,用于指向当前对象,便于使用。其特性包括:指向当前对象,适用于所有成员函数但不适用于初始化列表;作为隐含参数传递,不影响对象大小;类型为`ClassName* const`,指向不可变。`this`的作用在于避免参数与成员变量重名,并支持多重串联调用。例如,在`Stu`类中,通过`this->name`和`this->age`明确区分局部变量与成员变量,同时支持链式调用如`s.growUp().growUp()`。