精华内容
下载资源
问答
  • 如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针。 假设有一个 int 类型的变量 a,p1是指向 a 的指针变量,p2 又是指向 p1 的指针变量,它们的关系如下图所示: 将这种关系转换为C语言...

    指针可以指向一份普通类型的数据,例如 int、double、char 等,也可以指向一份指针类型的数据,例如 int *、double *、char * 等。

    如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针。

    假设有一个 int 类型的变量 a,p1是指向 a 的指针变量,p2 又是指向 p1 的指针变量,它们的关系如下图所示:
    C语言二级指针(指向指针的指针)演示图

    将这种关系转换为C语言代码:

    int a =100;
    int *p1 = &a;
    int **p2 = &p1;

    指针变量也是一种变量,也会占用存储空间,也可以使用&获取它的地址。C语言不限制指针的级数,每增加一级指针,在定义指针变量时就得增加一个星号*。p1 是一级指针,指向普通类型的数据,定义时有一个*;p2 是二级指针,指向一级指针 p1,定义时有两个*

    如果我们希望再定义一个三级指针 p3,让它指向 p2,那么可以这样写:

    int ***p3 = &p2;

    四级指针也是类似的道理:

    int ****p4 = &p3;

    实际开发中会经常使用一级指针和二级指针,几乎用不到高级指针。

    想要获取指针指向的数据时,一级指针加一个*,二级指针加两个*,三级指针加三个*,以此类推,请看代码:

    #include <stdio.h>
    
    int main(){
    int a =100;
    int *p1 = &a;
    int **p2 = &p1;
    int ***p3 = &p2;
    
    printf("%d, %d, %d, %d\n", a, *p1, **p2, ***p3);
    printf("&p2 = %#X, p3 = %#X\n", &p2, p3);
    printf("&p1 = %#X, p2 = %#X, *p3 = %#X\n", &p1, p2, *p3);
    printf(" &a = %#X, p1 = %#X, *p2 = %#X, **p3 = %#X\n", &a, p1, *p2, **p3);
    return 0;
    }

    运行结果:

    100, 100, 100, 100
    &p2 = 0X28FF3C, p3 = 0X28FF3C
    &p1 = 0X28FF40, p2 = 0X28FF40, *p3 = 0X28FF40
    &a = 0X28FF44, p1 = 0X28FF44, *p2 = 0X28FF44, **p3 = 0X28FF44

    以三级指针 p3 为例来分析上面的代码。***p3等价于*(*(*p3))。*p3 得到的是 p2 的值,也即 p1 的地址;*(*p3) 得到的是 p1 的值,也即 a 的地址;经过三次“取值”操作后,*(*(*p3)) 得到的才是 a 的值。

    假设 a、p1、p2、p3 的地址分别是 0X00A0、0X1000、0X2000、0X3000,它们之间的关系可以用下图来描述:
    C语言多级指针演示图

    方框里面是变量本身的值,方框下面是变量的地址。

     

    展开全文
  • C++ 二级指针 图解

    2019-11-19 09:05:44
    针对https://blog.csdn.net/majianfei1023/article/details/46629065这篇博客中的二级指针的代码,做了一个图解

    针对https://blog.csdn.net/majianfei1023/article/details/46629065这篇博客中的二级指针的代码,做了一个图解

    二级指针图解

    展开全文
  • C++二级指针的作用

    2019-08-10 20:17:23
    1.作为参数传递可以改变参数指针指向的位置。 #include <bits/stdc++.h> using namespace std; int* b = new int(2);//申请一个int的空间,赋值为2,并定义一个int类型的指针b指向该地址 void Func(int** ...

    1.作为参数传递可以改变参数指针指向的位置。

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int* b = new int(2);//申请一个int的空间,赋值为2,并定义一个int类型的指针b指向该地址
    void Func(int** num)
    {
    	*num = b;//a的地址等于b的地址
    }
    int main()
    {
    	int* a = new int(1);//申请一个int的空间,赋值为1,并定义一个int类型的指针a指向该地址
    	Func(&a);//将a地址的地址传入函数
    	cout << *a << endl;//输出a的地址(此时a的地址等于b的地址,也就是输出b的地址)
    }
    

    2.可以动态分配内存

    #include <iostream>
    using namespace std;
     
    int main()
    {
        int **p;   
        int i,j;   //p[4][8] 
        //开始分配4行8列的二维数据   
        p = new int *[4];
        for(i=0;i<4;i++){
            p[i]=new int [8];
        }
     
        for(i=0; i<4; i++){
            for(j=0; j<8; j++){
                p[i][j] = j*i;
            }
        }   
        //打印数据   
        for(i=0; i<4; i++){
            for(j=0; j<8; j++)     
            {   
                if(j==0) cout<<endl;   
                cout<<p[i][j]<<"\t";   
            }
        }   
        //开始释放申请的堆   
        for(i=0; i<4; i++){
            delete [] p[i];   
        }
        delete [] p;   
        return 0;
    }
    
    展开全文
  • 目录 一.变量的内存实质到 1.1变量的实质 1.2 赋值给变量 1.3变量在哪里?...二....三. 二级指针(指针的指针) ...3.2.3二级指针的步长 四. 指针与数组 4.1 指针与数组名 4.1.1 通过数组名访问数组元素 4....

    目录

    一.变量的内存实质到

    1.1变量的实质

    1.2 赋值给变量

    1.3 变量在哪里?

    二. 指针是个什么东西?

     三. 二级指针(指针的指针)

    3.1 定义与初始化

    3.2 间接数据访问

    3.2.1 .改变一级指针指向

    3.2.2 改变 N-1 级指针的指向

    3.2.3 二级指针的步长

    四. 指针与数组

    4.1 指针与数组名

    4.1.1 通过数组名访问数组元素

    4.1.2 通过指针访问数组元素

    4.1.3 数组名与指针变量的区别

    4.2 指针数组( 字符指针数组 )

    4.2.1 定义

     4.2.2 代码实例

    4.3 二级指针与指针数组 

    4.3.1 .指针数组名赋给二级指针的合理性

    4.3.2 完美匹配的前提(小尾巴 NULL)


    在风起云涌的编程世界中,C/C++作为编程界的扛把子,以霸主地位而屹立不倒,究其原因,它有其他语言无法相媲美的“底牌”而存在,那就是——指针。指针被称为是C/C++中的精髓,也有人说由于指针的存在让C/C++变得更加难学,难懂,难消化。果真是这样吗?本篇文章让我们一起来揭开指针的真正面纱。

    一.变量的内存实质到

    1.1变量的实质

    要理解指针,首先就要理解“变量”的存储实质,如果你已经深入理解“变量”的存储实质,直接跳过本小节……

    首先我们来看一下内存空间图:

    如图所示,内存只不过是一个存放数据的空间,可以理解为装鸡蛋的篮子,装水果的箱子,或是装RMB的钱包,随便啦,反正就是这么一个很随意的玩意……现在我们把它想象成电影院的座位,电影院中的每个座位都要编号,而我们的内存要存放各种各样的数据,当然我们要知道我们的这些数据存放在什么位置吧!所以内存也要象座位一样进行编号了,这就是我们所说的内存编址(为内存进行地址编码)。座位可以是遵循“一个座位对应一个号码”的原则,从“第 1 号”开始编号。而内存则是按一个字节接着一个字节的次序进行编址,如上图所示。每个字节都有个编号,我们称之为内存地址

    内存编址:

    当我们在程序中写下了这样的语言声明:

    int i;
    char a;

    时,它其实是内存中申请了一个名为 i 的整型变量宽度空间(DOS 下的 16 位编程中其宽度为 2 个字节),和一个名为 a 的字符型变量宽度的空间(占 1 个字节)。

    内存中的映象如下图所示:

    图中可看出,i 在内存起始地址为 6 上申请了两个字节的空间(我这里假设
    了 int 的宽度为 16 位,不同系统中 int 的宽度可能是不一样的,最常用的win32环境下为4个字节),并命名为 i。
    a 在内存地址为 8 上申请了一字节的空间,并命名为 a。阿欧……这样我们就有两个不同类型的变量了。变量有了接下来我们考虑的就是如何给变量进行赋啦。

    1.2 赋值给变量

    再看下面赋值:
    i = 30;
    a = ’t’;
    你当然知道个两个语句是将 30 存入 i 变量的内存空间中,将“t”字符存入 a 变量的内存空间中。我们可以利用这样来形象理解:

    我们将30存在了以地址6(真正的地址可不是这样子哦,真正的地址如:0016FD14)为起始地址的两个字节空间里,a 在内存地址为 8 上申请了一字节的空间存入了‘t’,那么变量i和a在哪呢???

    1.3 变量在哪里?

    接下来我们来看看&i 是什么意思?是取 i 变量所在的地址编号嘛!我们可以这样大声读出来:返回 i 变量的地址编号。你记住了吗?如果没有,在读一遍:返回 i 变量的地址编号

    以一小段简单代码来弱弱看下:

    #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	int i = 30;
    
    	std::cout << "&i = "<< &i << std::endl;
    	std::cout << "i =  " << i << std::endl;
    
    	system("pause");
    	return 0;
    }

    输出结果为:

    输出的 &i 的值 0016FD14就是我们图示中内存空间编码为6的内存地址。接下来就进入我们真正的主题——指针。

    二. 指针是个什么东西?

    指针,想说弄懂你不容易啊!我常常在思索它,为什么呢?其实生活中处处都有指针,我们也处处在使用它。有了它
    我们的生活才更加方便了。没有指针,那生活才不方便。不信?你看下面的例子。

    比如有天你说你要学习C++,要借我的这本 C++ Primer Plus,我把书给你送过去发现你已经跑出去打篮球了,于是我把书放在了你桌子上书架的第三层四号的位置。并写了一张纸条:你要的书在第 三 层 四号的书架上。贴在你门上。当你回来时,看到这张纸条,你就知道了我借与你的书放在哪了。你想想看,这张纸条的作用,纸条本身不是书,它上面也没有放着书。那么你又如何知道书的位置呢?因为纸条上写着书的位置嘛!聪明!!!其实这张纸条就是一个指针了。它上面的内容不是书本身,而是
    书的地址,你通过纸条这个指针找到了我借给你的这本书。

    那么我们 C/C++中的指针又戴上了啥面具呢?让我们拭目以待。下面看一条声明一个指向整型变量的指针的语句:
    int *pi;

    pi 是一个指针,当然我们知道啦,但是这样说,你就以为 pi 一定是个多么特别的东西了。其实,它也只过是一个变量而已。与上一篇中说的变量并没有实质的区别。好了,这就是指针。仅此而已,就这么简单。不信你看下图:

    (说明:这里我假设了指针只占 2 个字节宽度,实际上在 32 位系统中,指针的宽度是 4 个字节宽的,即 32 位。)
    由图示中可以看出,我们使用“int *pi”声明指针变量 —— 其实是在内存的某处声明一个一定宽度的内存空间,并把它命名为 pi。你能在图中看出pi 与前面的 i、a 变量有什么本质区别吗?没有,当然没有!肯定没有!!真的没有!!!pi 也只不过是一个变量而已嘛!那么它又为什么会被称为“指针”?关键是我们要让这个变量所存储的内容是什么。现在我要让 pi 成为具有真正“指针”意义的变量。请接着看下面语句:
    pi = &i;
    你应该知道 &i 是什么意思吧!刚刚大声读的那句话,如果忘了,回头去在大声读,记住了!!!那这句代码怎么读呢?这样大声读:把 i 地址的编号赋值给 pi。并记下来。也就是你在 pi 里面写上 i 的地址编号。结果如下图所示:

    你看,执行完 pi=&i 后,在图示中的内存中,pi 的值是 6。这个 6 就是i 变量的地址编号,这样 pi 就指向了变量 i 了。你看,pi 与那张纸条有什么区别?pi 不就是那张纸条嘛!上面写着 i 的地址,而 i 就是那本厚书C++ Primer Plus。你现在看懂了吗?因此,我们就把 pi 称为指针。所以你要牢牢记住:指针变量所存的内容就是内存的地址编号 ! 本篇文章看完啥都可以没记住,这18个红字切记,切记,切记要牢牢刻在脑子里,也许可能或许大概在将来某个面试中人家问你指针是啥?这18个字足以得满分。也会随着你不断的学习对这句话会理解的越来越深。切记记住这18个红字!!好了废话太多了,现在我们就可以通过这个指针 pi 来访问到 i 这个变量了,请看代码:

    #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	int i = 30;
    
    	std::cout << "&i = "<< &i << std::endl;
    	std::cout << "i =  " << i << std::endl;
    
    	int *pi = &i;
    	std::cout << "*pi = " << *pi << std::endl;
    
    	system("pause");
    	return 0;
    }
    

    输出结果如下: 

    那么程序中*pi 什么意思呢?你只要这样大声读它:pi 内容所指的地址的内容(读上去好像在绕口令了),就是 pi 这张“纸条”上所写的位置上的那本 “书”—— i 。你看,Pi 的内容是 6,也就是说 pi 指向内存编号为 6 的地址。*pi嘛,就是它所指地址的内容,即地址编号 6 上的内容了,当然就是 30 这个“值”了。所以这条语句会在屏幕上显示 30。请结合上图好好体会吧!由于本人水平有限,对“指针是个什么东西?”的理解仅限于此,有问题我们在随时探讨喽。真想说:指针是个什么东西,这么难理解,脑仁疼疼的。
    到此为止,你已经能大声读出类似&i、*pi 写法的含义了。也知道了具体的相关操作。总结一句话:我们的纸条就是我们的指针,同样我们的 pi 也就是我们的纸条!剩下的就是我们如何应用这张纸条了。如何用?大声读出下面的代码并正确理解含义。

    char a,*pa;
    a = 10;
    pa = &a;
    *pa = 20;

    假设你已经完全掌握在此之前的所有内容,我们接着看看“指针的指针”它是个什么东西?即对int **ppa;中 ppa 的理解。

     三. 二级指针(指针的指针)

    二级指针,是一种指向指针的指针。我们可以通过它实现间接访问数据,和改变一级指针的指向问题。

    3.1 定义与初始化

    以一张简图说明问题:(看不懂看第二节)

    例子代码:

    #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	int i = 30;
    
    	std::cout << "&i = "<< &i << std::endl;
    	std::cout << "i =  " << i << std::endl;
    
    	int *pi = &i;
    	std::cout << "*pi = " << *pi << std::endl;
    
    	int **ppi = &pi;
    	std::cout << "**ppi = " << **ppi << std::endl;
    
    	system("pause");
    	return 0;
    }

     输出结果:

     思考:**pi 怎么读?代表的含义是什么?

    3.2 间接数据访问

    3.2.1 .改变一级指针指向

    例子代码:

    #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	int i = 30;
    
    	int *pi = &i;
    	std::cout << "一级指针*pi = " << *pi << std::endl;       //一级指针
    
    	int **ppi = &pi;
    	std::cout << "二级指针**ppi = " << **ppi << std::endl;   //二级指针
    
    	*pi = 20;
    	std::cout << "改变一级指针内容: *pi = " << *pi << std::endl;  //改变一级指针值
    	std::cout << "一级指针*pi = " << *pi << std::endl;       //二级指针
    
    	int b = 10;
    	*ppi = &b;
    	std::cout << "改变一级指针指向*pi = " << *pi << std::endl;   //改变一级指针的指向
    	std::cout << "二级指针**ppi = " << **ppi << std::endl;   
    
    	system("pause");
    	return 0;
    }
    

    输出结果:

    3.2.2 改变 N-1 级指针的指向

    • 可以通过一级指针,修改 0  级指针(变量)的内容。
    • 可以通过二级指针,修改一级指针的指向。
    • 可以通过三级指针,修改二级指针的指向。
    •  ·····
    • 可以通过 n  级指针,修改 n-1 

    3.2.3 二级指针的步长

    所有类型的二级指针,由于均指向一级指针类型,一级指针类型大小是 4,所以二级指针的步长也是 4,这个信息很重要

    四. 指针与数组

    4.1 指针与数组名

    4.1.1 通过数组名访问数组元素

    看下面代码:
    int i, a[] = {3,4,5,6,7,3,7,4,4,6};
    for (i = 0; i <= 9; i++)
    {
        std::cout << a[i] std::endl;
    }
    很显然,它是显示 a 数组的各元素值。
    我们还可以这样访问元素,如下:
    int i, a[] = {3,4,5,6,7,3,7,4,4,6};
    for (i = 0; i <= 9; i++)
    {
    std::cout << *(a+i) << std<<endl;;
    }
    它的结果和作用完全一样。

    4.1.2 通过指针访问数组元素

    int i, *pa, a[] = {3,4,5,6,7,3,7,4,4,6};
    pa = a; /*请注意数组名 a 直接赋值给指针 pa*/
    for (i = 0; i <= 9; i++)

    {
     std::cout <<  pa[i] << std::endl;
    }
    很显然,它也是显示 a 数组的各元素值。

    另外与数组名一样也可如下:
    int i, *pa, a[] = {3,4,5,6,7,3,7,4,4,6};
    pa = a;
    for (i = 0; i <= 9; i++)
    {
       std::cout <<  *(pa+i) << std::endl;
    }

    4.1.3 数组名与指针变量的区别

    请看下面的代码:
    int i, *pa, a[] = {3,4,5,6,7,3,7,4,4,6};
    pa = a;
    for (i = 0; i <= 9; i++)
    {
    printf("%d\n", *pa);
    pa++; /*注意这里,指针值被修改*/
    }

    可以看出,这段代码也是将数组各元素值输出。不过,你把循环体{}中的 pa改成 a 试试。你会发现程序编译出错,不能成功。看来指针和数组名还是不同的。其实上面的指针是指针变量,而 数组名只是一个指针常量。

    4.2 指针数组( 字符指针数组 )

    4.2.1 定义

    指针数组的本质是数组,数组中每一个成员是一个指针。定义形式如下:
    char * pArray[10];
    语法解析:pArray 先与“[ ]”结合,构成一个数组的定义,char *修饰的是数组的内容,即数组的每个元素。

    图示:

     4.2.2 代码实例

    #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	char * pArray[] ={"apple","pear","banana","orange","pineApple"};
    	for(int i=0; i<sizeof(pArray)/sizeof(*pArray); i++)
    	{
    		std::cout << pArray[i] << std::endl;
    	} 
    
    	system("pause");
    	return 0;
    }

    输出结果:

    4.3 二级指针与指针数组 

    4.3.1 .指针数组名赋给二级指针的合理性

    二级指针与指针数组名等价的原因:
    char **p 是二级指针;
    char* array[N]; array = &array[0]; array[0] 本身是 char*型;
    char **p = array;

    例子代码:

    #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	char * pArray[] ={"apple","pear","banana","orange","pineApple"};
    	std::cout << "**********pArray[i]************" << std::endl;
    	for(int i=0; i<sizeof(pArray)/ sizeof(*pArray); i++)
    	{
    		std::cout << pArray[i] << std::endl;
    	}
    		
    	char **pArr = pArray;
    	std::cout << "**********pArr[i]************" << std::endl;
    	for(int i=0; i<sizeof(pArray)/ sizeof(*pArray); i++)
    	{
    		std::cout << pArr[i] << std::endl;
    	}
    	system("pause");
    	return 0;
    }

    输出结果:

    4.3.2 完美匹配的前提(小尾巴 NULL)

    数组名,赋给指针以后,就少了维度这个概念,所以用二级指针访问指针数组,需要维度,当然了,也可以不用需要。

    实例代码:

    #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	//演绎 1
    	std::cout << "******演绎 1*****" << std::endl;
    	int arr[10] = {1};
    	for(int i=0; i<10; i++)
    	{
    		std::cout << arr[i] << std::endl;
    	}
    
    	int *parr = arr;
    	for(int i=0; i<10; i++)
    	{
    		std::cout << *parr++ << std::endl;
    	}
    
    
    	//演绎 2
    	std::cout << "*****演绎 2*****"<<std::endl;
    	char *str = "china";
    	while(*str)
    	{
    		std::cout << *str++ << std::endl;
    	}
    
    	char * pArray[] ={"apple","pear","banana","orange","pineApple",NULL};
    	char **pa = pArray;
    	while(*pa != NULL)
    	{
    		std::cout << *pa++ << std::endl;
    	}
    	system("pause");
    	return 0;
    }

    输出结果:

    【下一篇:】C/C++指针详解之提高篇(史上最全最易懂指针学习指南!!!!)

    展开全文
  • c++数组指针指针数组详解

    千次阅读 多人点赞 2019-03-14 15:33:16
    指针数组可以说成是”指针的数组”,首先这个变量是一个数组,其次,”指针”修饰这个数组,意思是说这个数组的所有元素都是指针类型,在32位系统中,指针占四个字节。 数组指针: 数组指针可以说成是”数组的指针”...
  • 二级指针的作用详解

    万次阅读 多人点赞 2015-06-25 00:37:47
    一、概念 在如下的A指向B、B指向C的指向...B是一个指针变量,其中存放着C的地址,但是B也要占空间的啊,所以B也有地址,B的起始地址是0x00000004,但是B内存中存放的是C的地址,所以B里面的内容就是0x00000008。 那么到此
  • 参考:二级指针的作用详解 首先得了解相关的符号: &,&a:取地址符,即把变量a的地址取出来 *,*a:访问a保存的地址的内容 代码 #include<iostream> using namespace std; int main() { int c = 123...
  • 下面我来说说指针在C及C++语言中的用法。 1.指针的定义 上一篇文章,变量的三个要素之一,变量的值包括变量的数据值和变量的地址值。这个地址值也可以由另外的一个变量来存储,这个变量就需要是指针变量。 指针的...
  • C:一级指针与二级指针详解

    千次阅读 多人点赞 2019-10-29 15:04:43
    1.指针和数组 指针是个用来存放地址的变量; &arr表示整个数组; arr数组名表示首元素的地址;...一级指针就是指指针,里面放的就是元素的地址,我们可以通过访问元素的地址来找到该地址里存放的内...
  • C/C++指针详解(经典,非常详细)

    千次阅读 2019-04-22 12:30:57
    C语言没有类的概念,C++才引入了类与对象,但是真正使得C/C++非常强大的原因,我觉得是它可以直接使用指针操纵内存,很多其他编程语言底层原理或者嵌入式通信协议原理也都是通过指针完成的,但是使用指针也有它的...
  • C++指针详解(精心整理)

    千次阅读 多人点赞 2019-05-03 21:07:18
    我想你一定和我一样刚开始接触C++的时候,被指针(pointer)引用(reference)内存分区等等诸多概念,弄得很头疼吧。其实回头想想,C/C++,python,java,shell...学习起来都有一个共性,那就是敲敲敲,多敲几遍代码...
  • C语言高级编程:二级指针的赋值

    千次阅读 2018-09-02 11:51:16
    在c语言中,经常会对二级指针变量(即指针的指针)进行赋值操作。如果要对一个二级指针进行赋值,不能采用 p = &(&i) 这种语句,即不能对一个变量进行两次取地址操作。因为 &i 的值是一个右值,而&...
  • 目录 简介 示例 代码 输出 创建 定义删除器 示例 处理数组 销毁其他资源 ...隐式指针转换 ...共享指针shared_ptr是具有共享所有权语义的智能指针。 每当共享指针shared_ptr的最后一个所有者...
  • 多维数组与多级指针是初学者经常感觉迷糊的一个地方。超过二维的数组和超过二级的指针其实并不多用。但只要掌握一定的方法,理解多级指针和“多维”数组完全可以像理解一级指针和一维数组那样简单。
  • C/C++指针详解之基础篇

    千次阅读 多人点赞 2020-01-14 17:15:55
    目录 一.变量的内存实质到 1.1变量的实质 1.2 赋值给变量 ... 二级指针(指针的指针) 3.1 定义与初始化 3.2 间接数据访问 3.2.1 .改变一级指针指向 3.2.2 改变 N-1 级指针的指向...
  • C++ 指针和引用的详解

    2019-09-07 15:46:25
    定义: ...当使用指针作为形参时,编译器需要给指针零星分配存储单元,存储一个该指针的副本,在函数内部对付被进行操作。 使用应用作为形参时,函数将直接对实参进行操作,程序运行速度更快,效率...
  • C语言中的二级指针(2) -- 链表操作

    千次阅读 2015-04-25 22:38:57
    一个链表中所有元素通过指针串联起来,链表的插入、删除等操作都是对指针的操作。 使用指针操作链表 例如,下面的代码段实现了一个删除链表节点的函数,很多人都会采用类似的代码删除链表节点。 /* 结构体定义 */ ...
  • C语言简介: C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言具有高效、灵活、功能丰富、表达力强和较高的可移植性等特点。...【解析】(B) 维数组的一维大小,即指维数组的行数,在.
  • C++指针详解

    2021-11-27 13:18:51
    众所周知,C++是对C语言的一个继承和扩充,所以C++可以对C语言兼容,指针(Pointer)是C语言中的一个核心内容,同样,在C++中也可以使用指针,但是,就算是一个有着多年经验的程序员,也有时候会被代码中的指针弄得...
  • C++指针(含智能指针)

    2020-06-12 23:38:32
    指针简单的理解就是一个存放地址的变量,在C++中可以通过指针来操控内存; 指针的作用: 1.函数的值传递,无法通过调用函数,来修改函数的实参 ; 2.被调用函数需要提供更多的“返回值”给调用函数 ; 3.减少值传递时带来...
  • 指针的使用二级指针

    2017-11-24 17:06:11
    // 二级指针的使用 [11/24/2017 Andrew]struct Teacher { char name[64]; int age; }; // 在被调用函数中获取资源必须使用二级指针,因为局部函数 //中申请的变量会在函数调用结束的时候被释放掉,因此要使用二级...
  • C_C++指针指针应用详解

    千次阅读 2016-06-17 20:57:57
    要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以...
  • //用一个指针指向b的内存 *p=30;//那么此时b内存的值就是30了 C++与C语言中const的区别 主要是编译方式的区别:在C语言中,const被当作变量编译生成指令,所以const修饰的变量称为常变量。在C++中,编译时,所有出
  • 关于函数传值调用(二级指针)

    千次阅读 2017-08-15 20:49:34
    二级指针:其实,引用归根结底还是指针,只是C++通过引用更加方便和安全。下面介绍一下二级指针。 同样,当我们想通过p来修改str的时候,其实我们需要将 p 和 str 当成一个指针来看待,这时候,只有通过二级指针...
  • 二级指针和二维数组详解(转)

    千次阅读 2016-11-09 22:30:37
    二级指针和二维数组详解(转)  2010-01-11 14:36:22| 分类: C/C++|举报|字号 订阅    下载LOFTER我的照片书 | 一个函数形如: ...
  • c/c++ 维数组指针参数传递 矩阵计算实例

    千次阅读 多人点赞 2019-03-30 00:57:19
    c++实验代码及学习笔记(一) 你好! 这是一个高程实验课的代码记录及学习笔记。我将记录一些重要的知识点、易错点。但是作为大学生,水平很低,敬请指点教导、优化代码。 今天我将试图用沙雕文风解释维数组的...
  • 1.1.2 参数返回(二级指针) 1.2堆上二维空间 1.2.1指针作返值输出 1.2.2 空间申请与释放 1.2.3 多级指针作参数输出 1.2.4 具体实例之序列加密 二. const修饰指针 1.1const 修饰变量 1.2 const 修饰指针 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,507
精华内容 4,602
关键字:

c++二级指针详解

c++ 订阅