本人刚开始自学c语言
*pt2=pt1=&v
换算一下-1993345420=0x892ff674
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循环
灵活使用数组和指针,对相应字符串的表示方法、原理、结构需要一定的了解。
首先,需要理解指向指针的指针是什么意思。在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的地址
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的地址值,每次运行代码时,系统给每个变量分配的地址不一定都是同一块空间地址,这个值当然是变化的。