#include<stdio.h>
main()
{
void swap(int *p1,int *p2);//定义空类型交换两个变量的函数//
int a,b;
int *h1,*h2;
printf("please enter two integer numbers:");
scanf("%d,%d",&a,&b);//输入两个变量//
h1=&a;
h2=&b;
swap(h1,h2);//交换 h1,h2//
printf("%d,%d",*h1,*h2);
return 0;
}
void swap(int *p1,int *p2)//调用子函数,交换两个数的值//
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}
please enter two integer numbers:12,20
20,12
--------------------------------
Process exited after 10.89 seconds with return value 0
请按任意键继续. . .
题目一:
总结:1.刚开始的时候忘记在主函数中加入swap(h1,h2)了,导致直接输出两个数值。
2.写子函数的时候参考书上的例题8.4,输出的结果仍然没有交换数值,经过调整成功的交换了,但是仍有疑问。
3.对知识点还是没有充分理解和应用。
题目二:
参考书中的解释:未给*m赋值,因此m中无确定的值,所以m所指向的单元是不可预见的。所以,对*m赋值就是向一个未知的存储单元赋值,而这个存储单元中可能存储着一个有用的数据,这样就有可能破坏系统的正常工作状况。
题目三:
c语言中实参变量和形参变量之间的数据传递是单向的“值传递”方式。用指针变量作函数参数时同样要遵循这一规则。
题目四:
#include<stdio.h>
int main()
{
int comp(int,int);//函数声明
int (*p)(int,int);//定义指向函数的指针变量p
int a,b,c;
p=comp; //使p指向comp函数
printf("please enter a and b:");
scanf("%d,%d",&a,&b);
c=(*p)(a,b);//调用comp函数
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
return 0;
}
int comp(int x,int y)//定义comp函数
{
int z;
if(x>y) z=x;
else z=y;
return(z);
}
please enter a and b:12,25
a=12
b=25
c=25
--------------------------------
Process exited after 8.51 seconds with return value 0
请按任意键继续. . .
总结:参考书中的例题,我发现我在定义指向函数的指针变量p时不会定义,声明函数时也不知道如何声明,现在会了。