C中指针的运用学习

来源:百度知道 编辑:UC知道 时间:2024/05/28 03:31:33
代码:void main()
{
void swap(int *p1,int *p2);
int a,b;
int *pointer_1,*pointer_2;
scanf("%d,%d",&a,&b);
pointer_1=&a;pointer_2=&b;
if(a<b) swap(pointer_1,pointer_2);
printf("\n%d,%d\n",a,b);

}
void swap(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}

题目是:对输入的两个整数按大小顺序排序:

我的问题是主函数中 调用函数时传递的值是指针变量(没带星号),而函数本身却是定义的指针(带星号){swap(pointer_1,pointer_2);
void swap(int *p1,int *p2)}?
还有个问题:这个函数前面有VOID,这就是说函数没有返回值,那么这个函数产生的结果是如何反应到主函数中的?

第一,函数定义的形参中带*表示其参数的类型为int型的指针,而在本题中pointer_1,pointer_2均为int型的指针,所以直接可以当作实参来调用。

第二,指针型的变量作参数传递给子函数,其实就是把该指针型变量所指向的变量的地址传递给了子函数,此时子函数对该地址内的数据进行的操作都会直接改变被指向的变量的实际值 此处改变pointer_1指针所指的地址的值,实际就是改变的主程序中变量a的值。

指针指针.它是指向内存地址的.在调用子函数处理以后,它将内存地址中的数据给换掉了.

你说会出现什么样的情况?

你对指针是一点都不了解啊

一:
因为函数原型中定义了变量为指针..所以我们传递进来的参数都是作为指针来处理..及时你传递数值进来,他也会尝试用指针来运算,当然,结果是错误的...至于星号问题..你前面不是定义了int *了么?这个就是整形指针,传递时候,带上星号了就不是指针了,而是指针的值了.

二:
指针是按引用传递的,我们在函数内部的操作都是直接操作指针所指向的内存地址,所以,我们已经修改了实际参数,所以无须返回值,就达到修改变量的作用.

综上所诉楼主的指针.函数传递没学好吧?

void swap(int *p1,int *p2)
{
if(*p1 > *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
}

void swap(int *p1,int *p2)
函数参数列表中的 * 是可以认为是定义,但是在调用函数时,只是把pointer_1, pointer_2的值赋给了p1、p2,使得p1、p2指向a、b.
也是这样写更清楚
void main()
{
void swap(int *p1,int *p2);
int a,b;
//int *pointer_1,*pointer_2;
scanf("%d,%d