⑴ c语言,两数是怎样互换顺序的
其实就是内存地址的内容互换了;
p1 = &a1,就是取了a1在内存中的地址给p1,这个指针,那么p1就指向了a1的那块内存。
同理p2指向a2的内存。
然后*p1是取p1内存中的内容,也就是a1,赋值给a;
然后把*p2把p2内存的内容给*p1指向的内存。然后把a的值给p2指向的内存,*p2 = a;完成值的互换。
⑵ 怎样用c语言编写两值的交换
/*
编写c语言程序,实现交换两个变量值的操作。
要求:使用形参为指针的函数swap完成交换功能。
主函数中,使用整型指针从键盘输入两个整数,通过调用swap完成交换
输出交换前后的变量值进行比较。
输入输出示例:
Input two number:3 4
Before change:a=3,b=4
After change:a=4,b=3
*/
//File: swap.c
#include <stdio.h>
#include <stdlib.h>
void swap(int *a, int *b)
{
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
int main()
{
int *a=NULL,*b=NULL;
a=(int *)calloc(1,sizeof(int));
if(!a)
{
perror("calloc a err.");
}
b=(int *)calloc(1,sizeof(int));
if(!b)
{
perror("calloc b err.");
}
printf("Input two number:");
scanf("%d %d",a,b);
printf("Before change:a=%d,b=%d\n",*a,*b);
swap(a,b);
printf("After change:a=%d,b=%d\n",*a,*b);
return 0;
}
C:\mypro>gcc -g -Wall swap.c -o swap
C:\mypro>swap
Input two number:3 4
Before change:a=3,b=4
After change:a=4,b=3
C:\mypro>
程序已调好,直接运行即可。
⑶ 关于C语言交换两个数(有关指针)
在C语言中,通过函数参数传递,进行两个数的交换,必须采用传递指针的方式,同时,在函数中,一定要对两个指针中的数据内容进行交换才能达到交换实参地址中数据的目的。
如:
//正确的交换函数
voidswap1(int*p1,int*p2)
{
intp;
p=*p1;//通过*引用地址中的数据,进行交换
*p1=*p2;
*p2=p;
}
//错误的交换函数
voidswap2(int*p1,int*p2)
{
int*p;
p=p1;//这里进行改变的是形参的值,而形参只是实参的一个副本,形参本身的变化,是不能改变实参的值的!!
p1=p2;
p2=p;
}
PS:要正确认识C语言中的实参与形参,形参在使用中只是实参的副本,若形参是指针,我们可以通过形参改变实参地址中的内容,但无法改变实参本身的值!
⑷ c语言函数的使用,定义一个交换函数 实现2个数字的交换。
void Swap(int&x,int&y)
{
int temp=0;
temp=x;
x=y;
y=temp;
}
int main()
{
int a=1;
int b=2;
Swap(a,b);
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
system("pause");
return 0;
}
运行结果:
(4)c语言怎么将两个数交换扩展阅读:
用指针交换:
void Swap(int*x,int*y)
{
int temp=0;
temp=*x;
*x=*y;
*y=temp;
}
int main()
{
int x=1;
int y=2;
Swap(&x,&y);
printf("x=%d,y=%d ",x,y);
system("pause");
return 0;
}
运行结果:
X=2;Y=1
⑸ C语言.定义一个函数实现交换两个整数的功能,(用指针做函数参数)。
C语言.定义一个函数实现交换两个整数的功能,(用指针做函数参数)。 #include<stdio.h>
void swap(int *p,int *q)
{ int t;
t=*p; *p=*q; *q=t;
}
main()
{ int a=5,b=4,*p,*q;
p=&a; q=&b;
swap(p,q);
printf("a=%d b=%d",a,b);
return 0;
}
..
C语言 指针做函数参数 的优点
首先你要认闷迹识函数传参是怎么进行的
函数传参是复制形的,举个例子说:
void modify(int a)
{
a++;
}
void main()
{
int a=5;
modify(a);
printf("%d",a);
}
这个程序的答案还是5。为什么?
因为当调用陪备modify(a)时,在执行modify函数时,是另外开辟了一个内存空间,将main中a的值复制过来,modify函数中所有的操作都是相对于这个新开辟的内存空间而言的,对原来的a没有任何改变。
现在就来说说指针,如果用指针传参的话那就完全不一样了,指针(pointer),说白了即是指向变量内存地址。同样上面的例子:
void modify(int * a)
{
(*a)++;
}
void main()
{
int a=5;
modify(&a);
printf("%d",a);
}
这个答案当然是6
因为你传进去的是a的地址,所以在modify函数中的操作都是对a地址上的内容进行操作,即是操作a所以modify函数不用返回这个数,main中a的值也会改变。因为大家都是操作同一个内存空间,而上面不用指针,modify操作的是另一个新开辟的内存空间,只是这个内存空间初始值和a一样。
现在来说说传参,其实你“为什么函数参数是字符串的多用指针?” 那句我不是很明白,C中的字符串传参好像就指针一种形式(除非用结构体)。
何时用指针,何时用拷贝。当传的参数是一个结构体,而这个结构体比较大,这时最好用指针,因为如果用拷贝的话,单单花在拷贝的时间就要浪费很多,而如果这个函数经常被调用,那么这效率问题就出现了。
你在子函数中要对你的主调用函数中变量进行操作时也可以用指针做参数,这样子函数就可以不用return 如果不是用指针的话,就要再子函数的未尾加上一条return x;把这个数返回当返回值。
多看点书,多写点程序,刚开蚂乱并始学都会对指针比较迷茫。写多了,自然而然就懂了。
c语言中如果函数的参数不用指针而用整数能否实现值交换?
不能
解释:
1.就像是 你复印了一份文件, 对复印的文档进行修改 那么你的原文档上面能有改动吗?
C语言; 编写一个函数,用指针方法实现功能
int find(char* source/*源串*/, char* target/*子串*/)找到返回在源串中的位置,未找到返回-1,如果要改为找到返回1,把return i改为return 1;{ int i,j; int s_len=strlen(source); int t_len=strlen(target); if(t_len>s_len) { return -1; } for(i=0;i<=s_len-t_len;i++) { j=0; int flag=1; if(source[i]==target[j]) { int k,p=i; for(k=0;k<t_len;k++) { if(source[p]==target[j]) { p++; j++; continue; } else { flag=0; break; } } } else { continue; } if(flag==1) { return i; } } return -1;}
C语言,用指向函数指针的知识实现两个函数求和的功能
两个函数求和?是两个数求和的函数吧!
int add(int a, int b){ return a+ b;}
int main()
{
int sum;
int (*fn)(int , int );
fn = add;
sum = fn(3,5);
}
利用指针作函数参数,设计一函数实现将n个元素进行排序
将这n个元素存在数组里,然后用指针类型参数接收即作为形参,然后采用排序算法对这些元素进行排序即可
C语言,编写一函数,其功能是求一个长整数各位数字之和。要求使用指针函数实现
其功能是求一个长整数各位数字之和:
int function(long l){
int sum = 0;
String s = l+"";把长整数转成字符串
for(int i=0;i<s.length();i++){
sum +=Integer.ValueOf(s.charAt(i));
}
return sum;
}
c程序,使用指针作为函数参数,编写函数实现两个字符串连接
char *mycat(char *a,const char *b){ char *t; if(!a || !b) return NULL; t=a; while(*a) a++; while(*a++=*b++); return t;}
编一个函数sort,使10个整数按升序排列,在main函数中输入这10个数,并输出排好序的数,函数参数用指针实现
#include<stdio.h>
void sort(int *a,int n)
{
int i,j,temp;
for(j=0;j<n;j++)
for (i=0;i<n-j-1;i++)
if (a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
void main()
{
int i,j,temp;
int a[10];
for(i=0;i<10;i++)
scanf ("%d,",&a[i]);
sort(a,10);
for(i=0;i<10;i++)
printf("%d ",a[i] );
printf("\n");
}
c语言编程:用指针变量作函数参数求三个数和
#include "stdafx.h"#include "process.h"double getsum(double *a, double *b, double *c);声明函数 参数为double类型的指针int main(int argc,char* argv[]){double *sum=new double;*sum = 0;double x = 1.33332;double y = 2.1;double z = 6.4;*sum=getsum(&x, &y, &z);用变量地址做参数调用函数printf("%g\n",*sum);delete sum;释放空间sum = NULL;system("pause");return 0;}double getsum(double *a, double *b, double *c){ return (*a +*b+ *c );}
⑹ C语言交换两个变量数值的几种方法
int 类型为例, 可以用两种
安全交换: 使用中间变量(无论直接用,还是用指针或者引用, 都一样)
inta=1,b=2;
intt;
t=a;
a=b;
b=t;
不安全交换: 不使用中间变量,可能会溢出
inta=1,b=2;
a=a+b;
b=a-b;
a=a-b;
⑺ 在C语言中如何将两个数进行互换
将两个数进行互换的方法有两种形式:
1、借助中间变量完成,此方法直观,易理解,使用最多
2、不需要中间变量,通过变量身的运算完成交换。
参考代码:
方法1:
int a=2,b=3,t;
t=a; //先将a存储到临时变量t中
a=b; //将b存储到a中
b=t; //将临时变量中的原a值存储到b中
printf("a=%d b=%d\n", a,b );
方法2:
int a=2,b=3,t;
a += b ; //把两数之和存到a中
b= a-b ; //用两数和减去b可得原a,存储到b中
a= a-b ; //因为b现在是原a值,所以,用两数和减去b(原a)可得 原b,存储到a中
此方法,还可以用异或运算来实现,原理相同。