1.互换两个数字:
# include<stdio.h>
void g(int * p,int * q)
{
int t; //如果要互换*p和*q的值,则t必须定义为int,
t = * p; //不能定义为int*,否则会有语法错误.
* p = * q;
* q = t;
}
int main()
{
int a=3, b=5;
g(&a,&b);
printf("a = %d ",a);
printf("b = %d ",b);
return 0;
}
/*
#include<stdio.h>
void f(int a,int b) //该函数不能完成互换功能!
{
int t;
t = a;
a = b;
b = t;
}
int main()
{
int a=3,b=5;
f(a,b);
printf("a = %d ",a);
printf("b = %d ",b);
return 0;
}
*/
/*
# include<stdio.h>
void g(int * p,int * q) //不能完成互换功能
{
int * t; //如果要互换指针变量,必须是int,不能是int*
t = p;
p = q;
q = t;
}
int main()
{
int a=3, b=5;
g(&a,&b);
printf("a = %d ",a);
printf("b = %d ",b);
return 0;
}
*/
2.输入n个数,按从小到大的顺序输出:
#include <stdio.h>
#include <malloc.h>
int main(void)
{
int i,j,t,len;
int *p;
printf("请输入所排数的个数:\n");
scanf("%d",&len);
p=(int *)malloc(4*len); // 对数组赋值
printf("输入所要排序的数\n");
for(i=0;i<len;++i)
scanf("%d",&p[i]);
printf("\n");
for(i=0;i<len-1;++i) //大方面的循环,次数结束一次得出一个最大值放在最后
for(j=0;j<len-i-1;++j) //在每趟中进行循环 要考虑到下面的j+1
if(p[j]>p[j+1]) //相邻两个数比较
{
t=p[j];p[j]=p[j+1];p[j+1]=t;
}
for(i=0;i<len;++i) //对结果输出
printf("%d ",p[i]);
return 0;
}
/*结论非常重要
for (i=0;i<n-1;++i)
for (j=0;j<n-1-i;++j)
if (a[j]>a[j+1])
{
t=a[j];a[j]=a[j+1];a[j+1]=t;
}
*/
c语言指针经典问题(交换两个数字)
最新推荐文章于 2023-10-31 19:29:53 发布