c语言中指向指针的指针问题

本人刚开始自学c语言

img

img


我认为Pt2=Pt1=&V
可输出的
Pt2总是一串数字,并且每次输出的结果都不一样,在变化
请问这是什么原理?

*pt2=pt1=&v
换算一下-1993345420=0x892ff674

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7776806
  • 除此之外, 这篇博客: PTA习题11-5 指定位置输出字符串 (20分)本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符中的 c语言代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • char *match( char *s, char ch1, char ch2 )
    {
        char a[MAXS]="",*p;//a字符数组是打印的ch1和ch2之间的字符,*p指针是返回ch1的地址
        int i=0,j=0;
        while((*(s+i)!=ch1)&&(*(s+i)!=0))//从第一个元素找起到ch1或字符串停止符'\0'停止
        {
            i++;
        }p=s+i;//p指针指向找到ch1或'\0'后s字符串后面的部分
        a[j]=*(s+i);//将ch1或'\0'给到a数组第一个元素------①
            j++;i++;
        while((*(s+i)!=0)&&(*(s+i)!=ch2))//找ch2或'\0'停止,期间复制中间字符给a数组
        {
            a[j]=*(s+i);
            j++;i++;
        }//---------②
        a[j]=*(s+i);//最后加上ch2或'\0'
       printf("%s\n",a);
        return p;
    }
    

    ①—②实际是do while循环
    灵活使用数组和指针,对相应字符串的表示方法、原理、结构需要一定的了解。
    在这里插入图片描述

  • 以下回答由chatgpt基于相关博客总结生成:

    首先,需要理解指向指针的指针是什么意思。在C语言中,指针是一个存储变量地址的变量。而指向指针的指针,则是指向一个指针变量的指针。也就是说,指向指针的指针存储的是指针变量的地址。

    在参考资料给出的程序中,并没有出现直接使用指向指针的指针的情况。但是可以通过分析代码来解释指向指针的指针的原理。

    首先,在主函数中定义了一个struct stud_node类型的指针变量p和head,然后调用createlist()函数来创建一个链表,并将返回的链表头地址赋值给head。然后,通过用户输入来获取一个最小分数值,并将此值作为参数调用deletelist()函数。

    在deletelist()函数中,首先定义了一个指向指针的指针(Pt2),用来保存指向当前节点的指针的地址。然后,根据传入的最小分数值,遍历整个链表,删除分数低于最小分数的节点。如果删除成功,则将当前节点的next指针保存到Pt2中。

    最后,在主函数中,使用循环遍历链表,并输出节点的各个数据,直到链表结束为止。

    通过分析代码,可以得出结论:指向指针的指针(Pt2)其实是用来间接修改指针变量的值。

    下面是一个具体的解决方案,通过代码演示指向指针的指针的使用:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
        int num = 5; // 定义一个整型变量
        int *p1 = &num; // 定义一个指向整型的指针,存储变量num的地址
        int **p2 = &p1; // 定义一个指向指针的指针,存储指针p1的地址
    
        printf("num = %d\n", num);
        printf("*p1 = %d\n", *p1);
        printf("**p2 = %d\n", **p2);
    
        **p2 = 10; // 通过指向指针的指针修改变量num的值
    
        printf("num = %d\n", num);
        printf("*p1 = %d\n", *p1);
        printf("**p2 = %d\n", **p2);
    
        return 0;
    }
    

    输出结果是:

    num = 5
    *p1 = 5
    **p2 = 5
    num = 10
    *p1 = 10
    **p2 = 10
    

    可以看到,通过指向指针的指针修改了变量num的值,证明了指向指针的指针的作用。

    希望这个解决方案对你有帮助!如果还有其他问题,请随时提问。

第20行,输出 *Pt2 时格式符用 %p , 不是用 %d, *Pt2是 指针Pt1的地址值,每次运行代码时,系统给每个变量分配的地址不一定都是同一块空间地址,这个值当然是变化的。