C语言.定义一个函数实现交换两个整数的功能,(用指针做函数参数)。 #includestdio.h
创新互联主要从事网页设计、PC网站建设(电脑版网站建设)、wap网站建设(手机版网站建设)、成都响应式网站建设公司、程序开发、网站优化、微网站、重庆小程序开发公司等,凭借多年来在互联网的打拼,我们在互联网网站建设行业积累了丰富的做网站、网站设计、网站设计、网络营销经验,集策划、开发、设计、营销、管理等多方位专业化运作于一体。
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_lens_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;kt_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;is.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个数,并输出排好序的数,函数参数用指针实现
#includestdio.h
void sort(int *a,int n)
{
int i,j,temp;
for(j=0;jn;j++)
for (i=0;in-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;i10;i++)
scanf ("%d,",a[i]);
sort(a,10);
for(i=0;i10;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语言主函数中交换两个变量的值,可以通过以下代码实现:
#includestdio.h
int main()
{
int a=10,b=20,temp;//先定义一个temp
//以下实现两个变量的交换(具体理解请参照图一)
temp=a;
a=b;
b=temp;
printf("a=%d,b=%d",a,b);//此时a=20,b=10;
return 0;
}
但是如何通过调用函数实现交换两个变量的值呢?
首先我们先写一下主函数
#includestdio.h
//调用函数前嫌态应先声明一下被调用函数,此处暂时省略,分析完毕形参后,会写上正确格式
//主函数
int main()
{
int a=10,b=20;
swap( );//此处正确写法应加入实参,但是为了分析,此时暂未写实参
printf("a=%d,b=%d",a,b);
return 0;
}
//以下为被调用函数中常见错误
//常见错误1:
void swap( int m,int n )//接收a和b的值
{
int temp=m;
m=n;
n=temp;
}
//此处错误在于脊戚,此处为值传递,被调函数swap中交换了m和n的值,并未交换主函数中a,b的值樱者陵,所以a和b输出结果仍然为a=10,b=20;具体参考下图
//常见错误2:
void swap( int *m,int* n )//接收a和b的地址
{
int *temp=m;//定义一个指针temp,把指针m中的地址赋给指针temp
m=n;
n=temp;
}
//此处错误在于,swap中实现了,两个指针m和n指向的交换,但是并未对主函数中的a和b进行操作,所以输出结果依然为a=10,b=20;具体参考下图