精华内容
下载资源
问答
  • 这里主要是指的是字符串指针 比如 ``` 比如 char s1[]="hello";...就是想通过修改指针指向来做 ``` 这个可以实现么 不要函数不要循环复制 为什么不能让s+5=t,就是让它接下来指向t的地址呢
  • 当函数的形参为结构体指针,但是在函数中不仅修改指针指向的值,而且修改指针指向的地址 以下可以改变主函数中a的值,但是a指向的地址不会发生改变 struct student { int aa; int bb; student() {} student(int ...

    当函数的形参为结构体指针,但是在函数中不仅修改指针指向的值,而且修改指针指向的地址

    以下可以改变主函数中a的值,但是a指向的地址不会发生改变

    struct student {
      int aa;
      int bb;
      student() {}
      student(int aa, int bb) : aa(aa), bb(bb) {}
    };
    
    void fun(student* a, student* b) {
      *a = *b;
    }
    
    int main() {
      student* a;
      a = new student();
      student b = student( 3, 4 );
      printf("%p\n", a);
      fun(a, &b);
      printf("%p\n", a);
      printf("%d\n", a->aa);
      return 0;
    }
    

    以下这种方式,不仅修改了a的值,而且改变了a指向的地址,指向了b

    struct student {
      int aa;
      int bb;
      student() {}
      student(int aa, int bb) : aa(aa), bb(bb) {}
    };
    
    void fun(student** a, student* b) {
      *a = b;
    }
    
    int main() {
      student* a;
      a = new student();
      student b = student( 3, 4 );
      printf("%p\n", a);
      fun(&a, &b);
      printf("%p\n", a);
      printf("%d\n", a->aa);
      return 0;
    }
    
    展开全文
  • 需求:通过函数修改指针pointtodefine,使其指向自定义的类MyClass。 方法:需要将指向该指针的指针作为参数传递给函数,再在函数中修改(即指针的指针作为参数传递给函数) //函数定义 void user(void ** ...

    修改指针地址:一般可直接将指针赋值为目标类的地址

    void* pointtodefine=new MyClass();

     

    通过函数修改指针指向的地址

    有些场景需要通过函数修改指针pointtodefine,使其指向自定义的类MyClass。(例如,仅函数为留给用户的接口)

     

    注意:对于函数参数是通过值传递的情况,如果函数参数为指针的话,将实参指针传递给函数形参,相当于拷贝了实参,在函数内部修改指针地址不会影响原来实参指针的地址。但是,如果在函数内部修改指针指向的值,则实参指针指向的值也随之更改。

     

    总结:指针作为函数的参数,在函数中只能修改指针指向的值,无法实现修改实参指针的地址;指针的指针作为函数参数,在函数内部可以实现修改实参指针的地址。

    方法:需要将指向该指针的指针作为参数传递给函数,再在函数中修改(即指针的指针作为参数传递给函数)。图示化过程如下:

    具体代码如下:

    //函数定义
    void user(void ** ppanonymity){
        MyClass* target=new MyClass();
        *ppanonymity=target;
    }
    
    int main(){
        //调用方法
        void* pointtodefine=null;
        user(&pointtodefine);
        return 0;
    }
    

    它实现的作用还是

    void* pointtodefine=new MyClass();
    展开全文
  • 如何在子函数中修改主函数中...那么修改指针也是一样的,修改指针,那么我们就需要在子函数的形参列表中定义一个指向指针的指针,通过在主函数中调用子函数并且将指针的地址作为实参调用子函数,这样就可以在子函数...

    如何在子函数中修改主函数中的指针变量的值呢

    正如我们在子函数中修改int类型的变量是通过定义函数形参为指向int类型的指针,然后将int 类型变量的地址传递给了 指向int类型的指针,这样就可以在子函数中修改主函数中int的值。
    那么修改指针也是一样的,修改指针,那么我们就需要在子函数的形参列表中定义一个指向指针的指针,通过在主函数中调用子函数并且将指针的地址作为实参调用子函数,这样就可以在子函数中修改主函数的指针变量了。

    下面的程序示例中演示了上述过程

    Statue CreatBiTree(BitNode * T)
    {
        char ch;
    
        scanf("%c", &ch);
        fflush(stdin);
        if (ch == '@')
            T = NULL;
        else
        {
            T = (BitNode *)malloc(sizeof(BitNode));
            if (!(T))
                exit(OVERFLOW);
            (T)->data = ch;
            CreatBiTree(((T)->lChilid));
            CreatBiTree(((T)->rChilid));
    
            return OK;
        }
    }
    
    int main(void)
    {
        BitNode temp;
        BitNode * T;
    
        printf("do create now \n");
        CreatBiTree(T);
        DLR(T);
        printf("over print the tree \n");
    }
    

    如果这样输入ABC@@DE@G@@F@@@会发生segmentation fault、
    这当中的原因,应该是访问了不该访问的内存 具体原因还不得而至,准备去看《C和指针》这本书,看完我再回来,如果有大神知道错误请赐教

    #include <stdio.h>
    #include <stdlib.h>
    
    #define TRUE 1
    #define FALSE 0
    #define OK 1
    #define ERROR 0
    #define INFEASIBLE -1
    #define OVERFLOW -2
    
    typedef int elemType;
    typedef int Statue;
    
    typedef struct BitNode
    {
        elemType data;
        struct BitNode * lChilid;
        struct BitNode * rChilid;
    } BitNode;
    
    Statue CreatBiTree(BitNode ** T)	//定义指向指针的指针用以改变指针
    {
        char ch;
        // 也就是将上一个程序中的T全部替换为*T,
       //T现在是指向指针的指针,对T进行解引用(*T)为指针指向BitNode的指针
        
        scanf("%c", &ch);
        fflush(stdin);
        if (ch == '#')
            *T = NULL;	// 指针的指针进行解引(*T)是指针,解引用与&是“互逆运算”
        else
        {
            *T = (BitNode *)malloc(sizeof(BitNode));
            if (!(*T))
                exit(OVERFLOW);
            (*T)->data = ch;
            CreatBiTree(&((*T)->lChilid));
            CreatBiTree(&((*T)->rChilid));
    
            return OK;
        }
    }
    
    
    // 先序遍历
    Statue DLR(BitNode * T)
    {
        if (T)
        {
            printf("%c", T->data);
            DLR(T->lChilid);
            DLR(T->rChilid);
        }
    
        return OK;
    }
    
    int main(void)
    {
        BitNode temp;
        BitNode * T;
    
    // 经过这样的修改后通过Create函数建造的树的树根就可以返回到主函数中
        CreatBiTree(&T);
        DLR(T);
    }```
    
    
    展开全文
  • 修改指针与环操作 OK, 八个空格, 我们继续学习链表常见操作. 接下来主要分为两个部分的内容, 第一个部分, 总结链表中修改指针的题目; 第二部分, 讲环形链表! 可能第二个部分比较有干货. 链表问题的特性 - 修改...

    修改指针与环操作

            OK, 八个空格, 我们继续学习链表常见操作. 接下来主要分为两个部分的内容, 第一个部分, 总结链表中修改指针的题目; 第二部分, 讲环形链表! 可能第二个部分比较有干货.

    链表问题的特性 - 修改指针

            链表的问题实际上, 就是修改指针走向的问题. 很多时候多多画图, 用几个临时变量ListNode就可以解决了. 即使想要新建一个链表成本也很低, 改改指针复用之前的元素就好了. 当然, 这样讲太粗了, 等下会给出几个题目. 当然, 这也是因为笔者偷懒, 不知道这些题目应该归属到那些类型里面去. 要注意的是, 我们经常会将指针修改后, 继续使用, 从而导致错误. 例如

    reverse正常版本

    public ListNode reverse(ListNode head) {
        ListNode prev = null;
        ListNode tmp = head;
        while(tmp != null) {
            ListNode next = tmp.next;
            tmp.next = prev; // 记得先保存, 再修改
            prev = tmp;
            tmp = next;
        }
        return prev;
    }

    错误版本

    public ListNode reverse(ListNode head) {
        ListNode prev = null;
        ListNode tmp = head;
        while(tmp != null) {
            tmp.next = prev;
            prev = tmp;
            tmp = tmp.next;
        }
        return prev;
    }

    应对口诀: 先保存, 再修改. 一般会形成一个环.

    然后, 是修改指针有关题目: 两两翻转 , K个一组翻转 .

    环操作

    如果没有环操作, 那这个系列就不完整了.

    判断是否有环的存在

    环形链表 主要通过fast-slow指针去完成.

    查找环入口元素

    环形链表 II 需要一些理论知识 - Floyd 算法 .解析如下:

    首先, 假设环的长度为C, 非环部分的长度为F.  再设入口节点的下标是0, 相应的head节点的下标是-F, tail节点的下标是C-1.

    上图转自leet-code

    阶段一 

    slow=head;
    fast=head;

    现在开始fast-slow迭代. 当slow走到环的入口时, 迭代进行了F次; 而fast相对于slow多走了F步, 到达下标为h的点. 对于h, 我们有结论一: h = F mod C.(这是一个重要的结论,后面会用到. ) 

    由于相对速度, fast和slow在C-h次迭代之后相遇. 此时, fast位于下标为 h+2(C-h) = 2C-h的点, 即C-h点.  

    阶段二 

    再设置一个指针从头开始与fast进行同步迭代, 两者每次行进的步长为1. 

    在F次迭代之后, 第一个指针到达入口; 而fast,位于C-h+F处, 由于结论一, fast也位于入口.  两者相等.

    相关代码如下:

    public ListNode detectCycle(ListNode head) {
        ListNode slow = head;
        ListNode fast = head;
        while (fast != null && fast.next !=null) {
            slow = slow.next;
            fast = fast.next.next;
            if (fast == slow) {
                ListNode tmp = head;
                while (tmp!=fast) {
                    tmp = tmp.next;
                    fast = fast.next;
                }
                return tmp;
            }
        }
        return null;
    }

     

    展开全文
  • 1. 问题:在C语言中,当调用子函数并传入指针参数,在子函数中想修改指针本身的时候却发现不对劲,查阅资料后才发现原来是自己理解错了。 2. 代码:void fun( int *a ) { int b = 10; a = &b; }int main() { int ...
  • 如果你想修改的是个指针,那么是传递指针的地址(二级指针),还是传递该指针呢? 1. C语言中的函数调用 讲之前,先弄清楚一些概念:主调函数,被调函数,实参,形参。 void fun(int p) // p 是形参,是在fun()内...
  • 在双向链表存储结构中,删除p所指的结点时须修改指针()【MOOC选择题】
  • 间接修改指针的地址

    2008-02-06 21:03:00
    间接修改指针的地址源代码:// test for a pointer.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include using namespace std;typedef struct{ int *p;}Test;int main( ){ ...
  • 修改指针变量的值

    2019-11-04 08:32:04
    #include<stdio.h> void f(int *p); void ff(int ** q); int main(){ int i = 10; int *p = &...//想要修改i的值,需要传递i的地址过去 printf("%d\n",i); printf("%p\n",p); ff(&a...
  • 在双向链表存储结构中,删除p所指的结点时需修改指针的操作为 p-&gt;next-&gt;prior=p-&gt;prior; p-&gt;prior-&gt;next=p-&gt;next; p-&gt;next=p-&gt;next-&gt;next;p-&...
  • 修改指针里面的内容

    2017-09-27 10:21:00
    2686776就是地址,(int*)2686776转换为指针,*(int*)2686776转为变量 这里的意思就是地址里面的内容为20 21 printf( " i = %d\n " ,i); 22 return EXIT_SUCCESS; 23 }   转载于:...
  • 看下面的例子,定义一个无符号字符变量x,然后同时定义一个可以指向x的指针p,即可以将x的地址放到指针变量p里面,然后又定义了一个可以存放p地址的指针pp:#include "stdio.h"int main(void){//无符号字符变量x,指向...
  • 1、二维指针数组函数传递问题 1、二维数组的函数传递问题 在考虑这个问题前,我们首先要了解数组a[2]的a的含义,其实a可以看作一个指向数组元素类型并指向数组内第1个元素的指针。 当我们要将二维数组作为函数...
  • 修改指针指向的QVector内部成员的值

    千次阅读 2017-11-29 13:50:05
    指针容器改变内部元素的值
  • 终于在我的不断思索下做了如下修改,程序终于正常了。 int main ( ) { PCB PA ; PCB * Q = & PA ; initpcb ( Q ) ; getchar ( ) ; return 0 ; } 他可以成功接收一个字符了。 ...
  • // test for a pointer.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include using namespace std; typedef struct { int *p;...
  • 程序如下 int main() { char *apch[3] = {"a a", "s s", "d d"}; ...即“在转存时发生异常”:在将输入的每个字符串各自的地址赋给每个对应的...很明显,错误的使用指针来修改指针指向的常量的内容是存在风险的。
  • 我们在看代码的时候,会注意到,如果函数的参数需要结构体的时候,一般是传递结构体指针,而不是传递结构体,这一点在Windows API中几乎都是如此,凡是用到结构体的地方,都是用它的指针来做参数的,这是什么原因呢...
  • 指针修改

    2018-09-07 20:11:40
    使用null型指针指针初始化 *100=25 和*(int *)100=25
  • 指针地址的修改

    千次阅读 2013-03-10 19:37:22
    char *GetMemory( char *p )  {  p=(char *)malloc(100);  return p;  }  传入GetMemory函数的形参为字符串指针,在函数内部修改不能真正改变传入形参的值... 其实是这样的,当你想修改指针所指向的值的时候,那
  • 如何修改鼠标指针的样式

    万次阅读 多人点赞 2018-04-10 10:33:40
    将鼠标指针改成自己喜欢的样子吧 概要 不知道经常使用电脑的你有没有遇到过这样的问题,使用电脑的时候经常找不到自己的”鼠标指针”(就是当你挪动鼠标电脑屏幕上像箭头一样会动的东西) 或者有时候感觉...
  • HTML修改鼠标指针形状

    2020-05-01 16:08:04
    修改鼠标指针 实际项目中需要修改鼠标指针形状,比如按钮的手型指针,淘宝主图上的十字架指针,我们可以通过html实现修改鼠标指针形状 文字编辑 text 自动 auto 手型 pointer/hand(ie专用) 可移动...
  • 利用指针修改

    千次阅读 2017-06-14 14:48:46
    使用指针修改数据的值 使用指针修改常量时应注意:常量不能直接修改,直接修改常量程序会崩溃,需要先将常量转化为变量在进行修改
  • 有时候,会需要**鼠标移入**修改为自定义的鼠标指针,或者是修改**页面中**的鼠标指针,达到不同的效果。
  • Mycat修改指针问题

    2018-06-15 09:50:00
    Mycat在进行修改操作的时候,偶尔会发生空指针异常! 解决: 修改条件添加:分表字段 转载于:https://www.cnblogs.com/wanhua-wu/p/9186033.html

空空如也

空空如也

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

修改指针