精华内容
下载资源
问答
  • c++双重指针数组

    2018-11-25 22:29:36
    c++指针数组在使用的时候更加体现其“指针”的特性。 #include <iostream> using namespace std; int main (int argc, const char* argv[]) { int** arrp; int arr[4][5]; arrp = new int* [4]; ...

    c++指针数组在使用的时候更加体现其“指针”的特性。

    #include <iostream>
    using namespace std;
    int main (int argc, const char* argv[]) {
        int** arrp;
        int arr[4][5];
        arrp = new int* [4];
        for (int i = 0; i != 4; ++i) {
            arrp[i] = new int[5];
        }
        cout << sizeof(*arrp) << endl;	//8
        cout << sizeof(int*) << endl;	//8
        cout << sizeof(*arr) << endl;	//20
        for (int i = 0; i != 4; ++i) {
            delete[] arrp[i];
        }
        delete[] arrp;
        return 0;
    }
    }
    
    展开全文
  • C++指针示例

    2017-11-11 14:57:09
    C++指针的展示,想进阶C++的可以看一下,如果看懂了对指针的理解会有一个新的高度
  • C++双重指针的区别

    2019-09-03 20:55:09
    #include <iostream> using namespace std; struct ListNode { int m_nValue; ListNode* m_pNext; }; void AddToTail(ListNode** pHead, int val) { ListNode* pNew = new ListNode...m_pNext ...
    #include <iostream>
    using namespace std;
    struct ListNode
    {
    	int m_nValue;
    	ListNode* m_pNext;
    };
    
    void AddToTail(ListNode** pHead, int val)
    {
    	ListNode* pNew = new ListNode();
    	pNew->m_pNext = nullptr;
    	pNew->m_nValue = val;
    
    	if (*pHead == nullptr)
    	{
    		*pHead = pNew;
    	}
    	else
    	{
    		ListNode* pNode = *pHead;
    		while (pNode->m_pNext != nullptr)
    			pNode = pNode->m_pNext;
    
    		pNode->m_pNext = pNew;
    	}
    }
    
    
    void AddToTail(ListNode* pHead, int val)
    {
    	ListNode* pNew = new ListNode();
    	pNew->m_pNext = nullptr;
    	pNew->m_nValue = val;
    
    	if (pHead == nullptr)
    	{
    		pHead = pNew;
    	}
    	else
    	{
    		ListNode* pNode = pHead;
    		while (pNode->m_pNext != nullptr)
    			pNode = pNode->m_pNext;
    
    		pNode->m_pNext = pNew;
    	}
    }
    
    int main()
    {
    	ListNode* p_nullptr = nullptr;
    	ListNode** p_p_nullptr = &p_nullptr;
    	AddToTail(p_nullptr, 100);
    	
    	return 0;
    }
    
    展开全文
  • C/C++ 指针和双重指针

    2020-12-29 11:10:43
    1.一级指针和二级指针 一级指针即常说的指针,其保存内存地址; 二级指针即指向指针指针,就是保存内存地址的指针变量的地址; 例: int a=1; int *p=&a; // p为a变量的地址,通过*p可以得到a的值 int **q=&...

    1.一级指针和二级指针

    一级指针即常说的指针,其保存内存地址;
    二级指针即指向指针的指针,就是保存内存地址的指针变量的地址;

    例:
    int a=1;
    int *p=&a;     // p为a变量的地址,通过*p可以得到a的值
    int **q=&p;    // q为p指针的地址,通过**q可以得到a的值 
    

    2.指针作为函数参数传递

    程序1

    #include<stdio.h>
     
    void  fun(int  *p){
        int  b=100;
        p=&b;
    }
    int main(){
        int  a=10;
        int  *q;
        q=&a;
        printf("%d\n",*q);
        fun(q);
        printf("%d\n",*q);
        return  0;
    }
    

    运行结果为:
    10
    10
    分析:一级指针作为函数参数传递时,函数体内对指针做的变动不会对原始指针造成改变。在传递一级指针时,只有对指针所指向的内存变量做操作才是有效的。

    程序2

    #include<stdio.h>
     
    void  fun(int  **p){
        int  b=100;
        *p=&b;
    }
    int main(){
        int  a=10;
        int  *q;
        q=&a;
        printf("%d\n",*q);
        fun(&q);
        printf("%d\n",*q);
        return  0;
    }
    

    运行结果为:
    10
    100
    分析:**传递二级指针时对指针指向做改变是有效的;**因为函数在传递参数时,编译器会为没有个函数参数制作一个副本,即拷贝;
    例如:void fun(int *p),指针参数p的副本为_p,编译器使_p=p,_p和p指向相同的内存空间,如果在函数内修改了_p所指向的内容,就会导致p的内容也做相应的改变。
    但如果在函数内_p申请了新的内存空间或者指向其他内存空间,则_p指向了新的内存空间,而p依旧指向原来的内存空间,因此函数返回后p还是原来的p。这样的话,不但没有实现功能,反而每次都申请新的内存空间,而又得不到释放,因为没有将该内存空间的地址传递出来,容易造成内存泄露。
    void fun(int **p),如果函数参数是指针的地址,则可以通过该参数p将新分配或新指向的内存地址传递出来,这样就实现了有效的指针操作。
    程序2中fun()函数运行完毕后里面的的局部变量b会被释放掉,此时main函数里面的q指向的内容是不确定的,之所以printf("%d\n",*q);能打印出100,是因为C++的内存清理机制是惰性的,所以调用完函数后执行几次cout<<*q; 会有意外的结果。
    From: link.

    展开全文
  • 在定义双重指针c的时候,用整型指针a的引用对其初始化,即把a的地址赋值给*c;c存放的是*c的地址,即&a的地址;&c存放为c的地址;**c存放的是0。 (2) int **c; *c=a; 初始化*c等于整型指针a,即把a的值赋值给*c指向...

    不多说,直接上测试代码

    #include<iostream>
    
    void GetMemory(char * memorystr,int num)
    {
    	
    }
    int main()
    {
    	using namespace std;
    	int b = 0;
    	int *a;
    	a = &b;
    	int **c = &a;    //a的引用赋给c
    	cout << "****{a}****" << endl;
    	cout <<"a:"<< a << endl;
    	cout <<"*a:" <<*a << endl;
    	cout << "&a:"<<&a << endl;
    	cout << endl;
    	cout << "****{b}****" << endl;
    	cout <<"b:"<< b << endl;
    	cout << "&b"<<&b << endl;
    	cout << endl;
    	cout << "****{int **c = &a;}****" << endl;
    	cout << "c:" << c<<endl;
    	cout << "*c:" << *c << endl;
    	cout << "**c:" << **c << endl;
    	cout <<"&c:"<< &c << endl;
    	cout << endl;
    	cout << "****{int **c; *c = a;}****" << endl;
    	*c = a;    //a的地址给c指向的内存
    	cout << "c:" << c << endl;
    	cout << "*c:" << *c << endl;
    	cout << "**c:" << **c << endl;
    	cout << "&c:"<<&c << endl;
    	return 0;
    }

    运行结果:

     

        从运行结果可以看出:

            对于整型指针a,a指向的是存放整型变量b的地址,&a是存放a的地址,*a指向的是整型变量b的值0。

            对于整型变量b,b为b存放的值0,而&b则为b本身的地址,即存放值的地址。

            对于双重指针c,我们在初始化是采用了两种方式

    (1)

    int **c = &a;

            在定义双重指针c的时候,用整型指针a的引用对其初始化,即把a的地址赋值给*c;c存放的是*c的地址,即&a的地址;&c存放为c的地址;**c存放的是0。

    (2)

     int **c;

    *c=a;

            初始化*c等于整型指针a,即把a的值赋值给*c指向的内容,即整型b的地址;&c存放的是c的地址;c存放为*c的地址;*c存放的是**c的地址,即指针整型指针a的值,即整型b的地址;**c即为b的值0;

            第一种方式与第二种方式等价;第一种初始化时,是把a的地址赋值给*c,第二种则是把a的值赋值给*c指向的内容。

            表达能力不够强,太绕了,直接上图吧。

     

     

     

     

    展开全文
  • 引用博文:...当指针作为函数参数传递时,在函数内部重新申请了一个新指针,与传入指针指向相同地址。在函数内部的操作只能针对指针指向的值。#include &lt;iostream&gt; using namespace st...
  • C++二重指针理解

    2019-11-11 17:15:17
    做算法题的时候经常会碰到二重指针,看着非常别扭,于是自己敲了一下代码来理解一下这个概念。 int main() { int a = 1; int b = 2; int*p1 = &a; int*p2 = &b; p2 = p1; int**q = &p1; printf...
  • c++中双指针的初始化

    千次阅读 2018-07-23 10:27:15
    指针初始化: 字符串双指针初始化: char **text = new char*[512]; for (int i = 0; i &lt; 512; i++) { text[i] = new char[1024]; } 整型双指针初始化: int **temp; int i = 0; //初始化 temp ...
  • 使用双重指针作为函数形参的例子,该例子中的实参是动态创建的双重指针形式,可以直接作为实参进行传递,如果实参只是普通的二维数组,则在做为实参的时候需要做相应地类型转换 。 #include using namespace ...
  • 双重指针的用法

    万次阅读 多人点赞 2016-04-11 18:19:10
    2、指针一直都是C语言的灵魂,我们平常用得最多的是一维指针,而双重指针用得相对较少,本文是对二维指针进行一个学习。首先看一道习题:char GetMemory(char *memorystr,u8 num) { memorystr = (char*)malloc(num)...
  • C++算法之玩转双指针

    2021-08-12 20:07:48
    玩转双指针 1.算法解释 双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务 若两个指针指向同一数组,遍历方向相同且不会相交,也成为滑动窗口 若指向同一数组,但是遍历方向相反,则可用来进行...
  • 如何使用双重指针

    千次阅读 2016-03-28 10:12:56
    双重指针的使用 单重指针已经够蛋疼了,c语言中还引入了双重指针,甚至若干重指针。使得这个情况变得更加复杂。虽然以前一直觉得双重指针也不过如此,指针的指针嘛,还不是照样理解,但是上一次重删代码中,...
  • c++二重指针

    2020-10-27 17:15:17
    int *aaaa =nullptr;... n 为一个二重指针,指向aaaa(aaaa为一个int类型指针) 或者说 n存储aaaa的地址 *n 取地址指向的对象,即aaaa;(aaaa存储了一个int类型的地址) **n 读取aaaa所指向的对象,即int类型的1
  • C++探索指针,双重指针,引用

    千次阅读 2017-09-16 23:00:23
    当我们的函数的参数有指针时: void change(int *_a,int &b){ _a=&b; } void main(){ int a=10,b=20; int *p_a=&a; change(p_a,b); printf("%d",*p_a); } 输出为:10 其实系统有一个隐含的操作,...
  • #include<iostream> using namespace std; int main() { int a[3][4]; for (int i = 0; i < 3; ++i) { for (int j = 0; j < 4; ++j) a[i][j] = i + j; } int** p;... for (in.
  • C++中指针的强制转换 强制类型转换(int)、(int&)和(int*)的区别 内存中的地址  地址的本质就是一串0和1的机器代码,内存中的地址没有明确数据类型,但地址值有类型,以32位编译器为例,内存中的地址是一个...
  • c++使用二重指针实现矩阵的储存释放和乘法
  • C++双指针法

    2020-11-19 18:57:28
    C++双指针法目的实例题目描述解题思路代码 目的 使用双指针思路可以大大降低算法时间复杂度。 实例 题目描述 求一个有序数组中和=8的下标。 解题思路 设置两个不同的指针 ,或者头,或者尾。在一个递增的序列中,...
  • 有一个这样的指针用来存储一个二维数组 int * a[][]=new int[10][10]; 用delete[][] a这样的操作么?
  • 双重指针的使用

    2016-12-19 10:30:29
    单重指针已经够蛋疼了,C语言中还引入了双重指针,甚至若干重指针。使得这个情况变得更加复杂。虽然以前一直觉得双重指针也不过如此,指针的指针嘛,还不是照样理解,但是上一次重删代码中,因为管理海量数据,引入...
  • C语言二重指针的运用

    2021-05-21 14:48:47
    『摘要』本文主要通过实例展示C/C++中二重指针的用法和用途,对于诸如二叉树等递归定义的数据结构有一定的指导作用。【关键字】:C/C++、二重指针、递归本人最近想实现一个B+树,虽然对B+树的理论有一定的认识,但...
  • C语言的指针详解,单指针,双重指针(char *和char **)

    千次阅读 多人点赞 2018-12-07 14:18:04
    char ** 定义的是一个双重指针 让我困惑的也就是双重指针 下面的图解释一下 指针变量地址双重指针1指针2地址变量地址 对于定义的单指针变量&amp;quot; p1 &amp;quot;里的值是变量 &amp;quot; ...
  • C++指针变量

    2019-08-08 18:06:33
    A detailed introduction to C++ pointer variable, maybe helpful!!!
  • 传递双重指针申请内存,典型用法 指针参数是如何传递内存的? 如果函数的参数是一个指针,不要指望用该指针去申请动态内存。如下示例中,Test函数的语句GetMemory(str, 100)并没有使str获得期望的内存,...
  • C++指针使用相关1 指针的前置知识--计算机内存1.1 什么是内存1.2 内存与指针 1 指针的前置知识–计算机内存 1.1 什么是内存 内存是CPU与外存交流的桥梁,计算机中所有程序的运行都在内存中进行。 二进制数系统中,...
  • 简单来说就是编译器没有找到指针对象的声明,声明这个对象就OK了。
  • 基础算法-双指针算法-C++实现 算法基本思想及步骤 题目关键点 AcWing题库-799-最长连续不重复子序列 题目 给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续区间,输出它的长度。 输入格式 第一行包含...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,759
精华内容 3,103
关键字:

c++双重指针

c++ 订阅