精华内容
下载资源
问答
  • C语言双重指针

    千次阅读 2018-10-21 23:09:31
    void change(int *p) //函数参数为整形指针,p = v,即 p和v都指向变量num { *p = 2; //修改*p的值也修改了num的值 printf("p = %d\n",*p); } int main() { int num = 1; //声明...

    这是我的一些二重指针的一些经验,希望对大家有帮助,如有啥错误或者更好的想法希望能指出,共同进步,谢谢

    #include<stdio.h>
    void change(int *p)		//函数参数为整形指针,p = v,即 p和v都指向变量num
    {
    	*p = 2;				//修改*p的值也修改了num的值
    	printf("p = %d\n",*p);
    }
    
    int main()
    {	
    	int num = 1;	//声明一个整形变量num
    	int* v = &num;		//令指针v指向num变量
    	printf("num1 = %d\n",num);	//输出num的值
    	change(v);					//调用函数
    	printf("num2 = %d\n",num);	//输出函数调用的num变量
    	return 0;
    }
    

    编译结果是num1 = 1,p = 2,num2 = 2
    通过以上代码可以看出,通过调用函数实现改变了num的值,是通过在函数里面创建一个新的指针指向num,从而修改num的值并没有改变指针v的指向,v还是指向num。

    #include<stdio.h>
    void change(char *p)
    {
    	p = "bbb";		//令字符型指针p指向字符串"bbb"
    	printf("p = %s\n",p);
    }
    
    int main()
    {	
    	char *v = "aaa";	//创建字符型指针,指向"aaa"这个字符串
    	printf("v1 = %s\n",v);//使用v而不是用*v的原因是,v没有对变量进行引用,而是字符串的首元素的地址 
    	change(v);
    	printf("v2 = %s\n",v);
    	return 0;
    }
    

    编译结果:v1 = aaa,p = bbb,v2 = aaa
    编译结果与预期不符,以为v2会是"bbb",却与意向的结果不一致。原因是在change函数里把指针v赋值给指针p,然后指针p又指向了"bbb",所以指针v还是指向"aaa"

    把上述代码做一个小小的修改如下

    #include<stdio.h>
    void change(char **p)		
    {
    	*p = "bbb";
    	printf("p = %s\n",*p);
    }
    
    int main()
    {	
    	char *v = "aaa";
    	printf("v1 = %s\n",v);
    	change(&v);		//传入指针v的地址
    	printf("v2 = %s\n",v);
    	return 0;
    }
    

    编译结果:v1 = aaa,p = bbb,v2 = bbb
    在change函数中,声明了一个双重指针p,p是指向指针的指针,他存放着指针的地址,在本例中,p也就存放着指针v的地址,p也就是指针v,即p = v。函数change中*p = “bbb"也就等于v = “bbb”。
    指针v指向了字符串"bbb”,不再指向字符串"aaa",真正实现改变了指针的值

    由此总结,当想用函数改变指针的指向时,函数参数应该是双重指针。当想用函数改变指针指向的元素的内容时,函数参数是指针就可了

    展开全文
  • C语言双重指针初始化

    2017-05-25 12:00:00
    /* 双重指针初始化 */ #include <stdio.h> #include <stdlib.h> #include <malloc.h> int main() { int m = 5;/*5行*/ int n = 6;/*6列*/ /* ...
    /* 双重指针初始化 */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    
    int main()
    {
    	int m = 5;/*5行*/
    	int n = 6;/*6列*/
    
    	/* 初始化 */
    	int **p;
    	p = (int **)malloc(m * sizeof(int *));
    
    	int i, j;
    	for (i = 0; i < m; i++)
    	{
    		p[i] = (int *)malloc(n * sizeof(int));
    	}
    
    	/* 赋值 */
    	for (i = 0; i < m; i++)
    	{
    		for (j = 0; j < n; j++)
    		{
    			p[i][j] = i + j;
    		}
    	}
    
    	/* 输出 */
    	for (i = 0; i < m; i++)
    	{
    		for (j = 0; j < n; j++)
    		{
    			printf("%5d", p[i][j]);
    		}
    
    		printf("\n");
    	}
    
    	return 0;
    }

    输出结果

    120053_d0xZ_1461588.png

    转载于:https://my.oschina.net/walkfaraway/blog/908774

    展开全文
  • 只考虑指针就够绕人了,双重指针更难理解。为了弄懂到底它们的实际意义是什么,写了个小片段,把各种使用指针的可能都了解一遍,仅供娱乐。 本人使用Archlinux+gcc, 代码如下: #include <stdio.h> int ...

    只考虑指针就够绕人了,双重指针更难理解。为了弄懂到底它们的实际意义是什么,写了个小片段,把各种使用指针的可能都了解一遍,仅供娱乐。

    本人使用Archlinux+gcc,

    代码如下:

    #include <stdio.h>
    int main()
        {
        int a=0;
        int *p=&a;
        int **q=&p;
        printf("&a is %d\n*p is %d\n&p is %d\np is %d\n*q %d\n**q %d\n&q %d\nq %d\n",&a,*p,&p,p,*q,**q,&q,q);
        return 0;
        }

    运行结果:

    &a is 1912746772  //变量a的地址
    *p is 0                       //p指向的内容,即a的值
    &p is 1912746776 //p的地址
    p is 1912746772    //指针变量p的值,p里存的地址,也就是a的地址
    *q 1912746772      //q指向的内容,也是a的地址
    **q 0                        //第一次解引用取出q的值,即p的地址;第二次解引用取出p指向的内容,也就是变量a的值
    &q 1912746784    //q的地址
    q 1912746776      //q的值,存的是p的地址

    以上,我看了10分钟自己没绕过来,有空接着慢慢看。

    过了半个月看了还是觉得绕。

     

    展开全文
  • C语言的指针详解,单指针,双重指针(char *和char **)

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

    最近在学习的过程中碰到了char **,突然发现关与指针的概念很模糊,所以温习了一下

    • char * 和char ** 之间的联系
      char *定义的式一个字符型指针
      char ** 定义的是一个双重指针
      让我困惑的也就是双重指针

    下面的图解释一下

    指针
    变量地址
    双重指针1
    指针2地址
    变量地址

    a
    b
    对于定义的单指针变量" p1 "里的值是变量 " i “的地址,即 p1=&i。
    " * " 是取值符,” p1 "代表的意思是取得 p1 指向的地址 (i的地址 ) &i 里的值 ,即p1=i。
    " & "是取地址符。

    下面着重分析双重指针:

    1.从字面意思理解,双重指针的含义即指向指针的指针
    2.图中定义的" p2 “就是一个双重指针,它是指向 *指针” p1"*的一个指针。
    3.分析指针"p2"的含义

    • &p2: 取得指针p2的地址为0x7ffc955d50c8
    • *p2 : 取得指针p2指向的 地址的值(该地址的值就是指针p1的值),即是“ *p2=p1”
      *p2即是p2中的值(p1的地址)地址单元存储的值即是i的地址
      注意:*p2 代表拿到p2的地址单元里的内容即是p1地址——>再拿到p1地址单元里的值.(最终拿到i的地址而不是i地址单元中的内容)
    • **p2: 相当于*p1的操作,取得指针p1指向的 地址的值(该地址就是i的地址),**p2=i,故输出printf("%c",**p2);为a。

    总结

    在学习c语言的过程中,如果又不懂的地方要学会实践验证,不要一股脑的看理论,老话说的号实践出真理

    有关于双重指针的应用后期再进行记录。

    如有错误欢迎指正,如造成困扰属实抱歉

    展开全文
  • C语言指针

    2021-01-25 10:21:41
    #C语言指针# 标题 双指针又叫二重指针,常常用于解决在不开辟额外内存空间的情况下交换数组或字符串中元素的相对位置的问题。
  • 指针数组:数组里面的每个元素都是指针;char* array[]={"hello","world","ooo"};理解:数组中有三个元素,每个元素都是char*类型,数组中保存的是三个字符串的首地址;注意:指针中...
  • 其实后面这两节我是用我几年前写的教程复制过来的=。=。。 ’ – ’ ) ( ^3^ )╱~~ ...那么好,前一节我们说的是用指针指向一个变量,那么这一小节我们就用一个指针A来指向另外一个指针B,然而指
  • C语言指针的常见用法

    万次阅读 2018-06-01 11:42:25
    鉴于工作经验有限,目前遇到的双指针的用法有如下几种情况,后续工作中如发现有其他的用法,会更新上去。1、用作函数的返回值,比较常见的是返回分配的堆内存地址。下面用一个例子进行说明下:[cpp] view plain ...
  • C语言二重指针与二维数组

    千次阅读 2019-07-23 21:51:28
    因为二维数组是数组的数组,又因为啊a[0]、a[1]、a[2]为三个数组的首地址(等同于&a[0][0]、&a[1][0]、&a[2][0]),所以当我们用二重指针创建数组的时候,实际上是创建了一个指针数组。 #include #include ...
  • c语言之二重指针与二维数组

    千次阅读 2018-05-06 12:16:25
    常量不能再取地址了, 二重指针赋值的时候不仅要看层次上 二重指针的两个用法
  • 快到天梯赛的日子了,题库里一堆二叉树的题目,搞的我这个没有学过数据结构的非常难受,加上之前大一学的指针忘了干干净净,才来复习一下指针。 希望大家阅读博客前先去阅读这篇博客,否则一些地方可能会有一些疑问 ...
  • 在分析Uboot程序时发现一个函数指针的用法,花了点时间研究一下。做个记录。 先说一下函数指针的基本用法。如下 int init01(void) { printf("行号:%d 函数名:%s \n", __LINE__, __FUNCTION__); return 0; } ...
  • C语言二重指针与malloc

    2015-06-19 11:32:00
    假设有一个二重指针: char **p; 同时有一个指针数组 char *name[4]; 如何引用p呢? 首先我们有程序代码如下 #include <stdio.h> int main() { char *s = "I love you"; char *s1 = "you love ...
  • 想要理解为什么在链表中使用双重指针这一知识点,首要我们要明白的一点就是,指针变量作为函数的参数时。 它的作用是将一个变量的地址传送到这个函数中。 但如果我们想要在子函数中改变实参的值需要怎么做呢? ...
  • 1.二重指针 (1)二重指针与普通一重指针的区别 ->本质上来说,二重指针和一重指针的本质都是指针变量,指针变量的本质就是变量。 ->一重指针变量和二重指针变量本身都占4字节内存空间。 ...
  • 双重指针的用法

    千次阅读 多人点赞 2018-09-20 22:11:39
    2、指针一直都是C语言的灵魂,我们平常用得最多的是一维指针,而双重指针用得相对较少,本文是对二维指针进行一个学习。 首先看一道习题: char GetMemory(char *memorystr,u8 num) { memorystr = (char*)malloc...
  • C语言 二重指针

    千次阅读 2019-03-27 22:05:24
    #include <stdio.h> #include<string.h> int main(int argc, char *argv[]) ... //二级指针前面加1个*,代表一级指针的值 *pp == &a; //二级指针前面加2个*,代表一级指针指向的值 ...
  • 文章转自:无际单片机大家好,我是无际。今天给大家来讲解一下指针。我会由浅到深,最后结合实际应用讲解,让大家学会指针的同时,知道大佬们都用指针来干嘛!长文预警!全文大约5200多字,学指针看...
  • 如何使用双重指针

    千次阅读 2016-03-28 10:12:56
    单重指针已经够蛋疼了,c语言中还引入了双重指针,甚至若干重指针。使得这个情况变得更加复杂。虽然以前一直觉得双重指针也不过如此,指针的指针嘛,还不是照样理解,但是上一次重删代码中,因为管理海量数据,引入...
  • 引用博文:...当指针作为函数参数传递时,在函数内部重新申请了一个新指针,与传入指针指向相同地址。在函数内部的操作只能针对指针指向的值。#include &lt;iostream&gt; using namespace st...
  • c语言指针和多重指针

    2020-04-28 13:43:08
    数据结构是一种思想,不限制于某一种语言,但再各种语言实现中却有许多小细节不可忽视,比如c语言中的指针,是个让人十分头疼的问题。 先以链表为例,这里定义了链表的结点表示,data为该结点存储的数据,next是指向...
  • 今天做了一条让我懵逼的题,让我重新认识到指针。 函数参数传递的只能是数值,所以当指针作为函数参数传递时,传递的是指针的值,而不是地址。 当指针作为函数参数传递时,在函数内部重新申请了一个新指针,与传入...
  • 程序如下,十分简短: #include void main(){ int a[3][4]={{1,2,3,4},{10,20,30,40},{100,200,300,400}};...二重指针a的地址何其内容是一样的如何解释,一重指针“a[0]”内容和他自己所在地址是一样的如何解释
  • C语言指针动态内存的申请和释放

    千次阅读 2020-08-20 21:10:28
    什么是动态内存的申请和释放?...C语言指针的申请: (1).在C语言中使用malloc函数申请内存,函数原形:void* malloc(size_t size); 参数size代表申请的内存的字节数,参数size_t代表指针的...
  • C语言之二级指针/双重指针

    千次阅读 2015-04-11 18:08:52
    C语言之二级指针/双重指针 首先,回顾字符串与指针的关系,声明如下: char *string="Hello!"; char string[]="Hello!"; 复杂声明解释方法:
  • C语言中的二级指针(双指针)

    万次阅读 热门讨论 2012-01-30 22:21:58
    原创作品,转载请标明出处...C语言中不存在引用,所以当你试图改变一个指针的值的时候必须使用二级指针。C++中可以使用引用类型来实现。下面讲解C中的二级指针的使用方法。例如我们使用指针来交换两

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,089
精华内容 1,635
关键字:

c语言双重指针

c语言 订阅