首页 > 其他分享 >c语言自学第二十天----深入探究指针下(补前面的)

c语言自学第二十天----深入探究指针下(补前面的)

时间:2024-07-28 21:24:10浏览次数:14  
标签:二级 ppa int ---- 探究 pa 数组 指针

一. 二级指针

C++中的指针是一个非常重要的概念,而二级指针是指向指针的指针。

  1. 什么是指针? 指针是一个变量,用来存储内存地址。它可以指向其他变量或对象,并通过解引用操作符 "*" 来访问所指向的值。

  2. 什么是二级指针? 二级指针是指向指针的指针,它存储的是指针的地址。通过二级指针可以间接访问指针所指向的值。

  3. 二级指针的声明和初始化 二级指针的声明和初始化与普通指针类似,只是需要多加一个 "*" 符号。例如:

int** p;  // 声明一个二级指针
int* ptr; // 声明一个普通指针

int a = 10;
ptr = &a; // 普通指针指向变量a的地址
p = &ptr; // 二级指针指向指针ptr的地址

4.二级指针的使用 通过二级指针可以访问指针指向的值。例如:

int a = 10;
int* ptr = &a;
int** p = &ptr;

cout << **p << endl; // 输出10,解引用两次可以得到变量a的值

5.二级指针的动态内存分配 使用二级指针可以动态地分配多维数组或多个变量的内存。例如:

int** matrix = new int*[n]; // 动态分配一维指针数组
for (int i = 0; i < n; i++) {
    matrix[i] = new int[m]; // 动态分配二维数组
}

注意在使用完二级指针后,要记得释放内存,避免内存泄漏。释放内存的方法与动态分配相反:

for (int i = 0; i < n; i++) {
    delete[] matrix[i];
}
delete[] matrix;

对于二级指针的运算有:

*ppa 通过对ppa中的地址进行解引用,这样找到的是pa , *ppa 其实访问的就是 pa .

int b = 20;
 *ppa = &b;//等价于 pa = &b;

 **ppa 先通过 *ppa 找到 pa ,然后对pa进行解引用操作:*pa ,那找到的是a.

**ppa = 30;
 //等价于*pa = 30;
 //等价于a = 30;

二. 指针数组

指针数组是指针还是数组? 答案:是数组。是存放指针的数组。

数组我们已经知道整形数组,字符数组。

 

那指针数组是怎样的?

其实一模一样只是存储的类型变成了指针罢了

int* arr3[5];

标签:二级,ppa,int,----,探究,pa,数组,指针
From: https://blog.csdn.net/tt2377/article/details/140756658

相关文章

  • 简单题 加强版
    由简单版中,我们已经推出了\[\sum_{d=1}^n\mu^2(d)d^{k+1}\sum_{t=1}^{\lfloor{\frac{n}{d}}\rfloor}\mu(t)t^k\sum_{i=1}^{\lfloor{\frac{n}{dt}}\rfloor}\sum_{j=1}^{\lfloor{\frac{n}{dt}}\rfloor}(i+j)^k\]我们设\(T=td\),则设\(S(x)=\sum_{i=1}^x\sum_{j=1......
  • Lua 语法 元表
    元表概念--任何表变量都可以作为另一个表变量的元表--任何表变量都可以有自己的元表(继承(浅拷贝))--当我们子表中进行一些特定操作时--会执行元表中的内容设置元表设置元表的公共方法setmetatable(被设置的表,元表)getmetatable得到元表,判断是否有元表meta={}myTa......
  • Verilog连续赋值、过程赋值、过程连续赋值总结
    最近总是遇到systemverilog的赋值问题,查看了一下手册发现SV的赋值方式总的还是继承了verilog的赋值方式,而且verilog赋值方面的资料比较多,所以就写了先写一篇关于verilog的赋值总结。连续赋值连续赋值就是一旦赋值,输出将随输入改变而变化,一旦修改输入则立刻体现在输出上。input......
  • Contest5408 - 数论函数
    Agcd\[\begin{aligned}&\sum\limits_{i=1}^n\sum\limits_{j=1}^n[\gcd(i,j)\inP]\\=&\sum\limits_{d=1}^n[d\inP]\sum\limits_{i=1}^n\sum\limits_{j=1}^n[\gcd(i,j)=d]\\=&\sum\limits_{d=1}^n[d\in......
  • 单峰数列
    用线段树维护原序列对应的差分数组,可以把区间修改简化为单点修改点击查看代码#include<bits/stdc++.h>usingnamespacestd;inta[100005],n;intread1(){ charcc=getchar(); while(!(cc>=48&&cc<=57)) { if(cc=='-') { break; } cc=getchar(); } bool......
  • 在 vim 中保存,退出
    用不用vimvim学习起来很难,需要很多的时间、精力。如果喜欢折腾,就学吧!在vim中完成编辑、保存和退出操作如果在windows,你就用gvim,按windows键,然后输入gvim,再按Enter键;如果在linux,你就用vim。好!现在你进入了vim!界面是这样的。首先,我直接写下来整个操作(现在......
  • 二手车预测-阿里云天池
    %matplotlibinlinefromsklearn.model_selectionimporttrain_test_splitfromtorch.utils.dataimportTensorDataset,DataLoaderimportpandasaspdimportzipfileimportreimportnumpyasnpimporttorchfromtorchimportnnfrommatplotlib_inlineimpor......
  • 深度学习使用交叉验证(2)
    在之前的项目中,数据比较多。都是按照7:1:2分为训练集、验证集和测试集,用验证集选出最优的模型,然后在测试集上进行测试。但是这次项目的数据比较少,验证集和测试集只有十几个、二十几个,这样用来验证、测试模型不能具有很大意义。·所以,在训练的时候想到了使用交叉验证的方法。......
  • 数字化建设常见问题:如何区分业务系统与分析系统?
    目录0引言1整体区别2架构区别3从功能、用途上区别4分析系统的价值5小结 0引言在数字化建设当中难免会遇到一些认知的问题,特别是在一些传统制造业中,数字化建设相对落后,业务部门习惯了现有的系统,对外界数字化的变化感知甚少,不由得便会对数字化建设质疑,提出一......
  • 计算机小白入门之选购电脑
    前言​这篇文章将带领计算机小白全面地了解如何选择电脑。我的文章不会像其他很多文章一样直接推荐电脑,而是教会读者知识与方法,然后自己去选电脑,这样一来读者才能选出最合心意的电脑。这是我的第一篇文章,如果读者发现有错误或不足,希望能理解并指出来,我会尽快进行更正。......