
C语言定义一个函数实现交换两个整数的功能,(用指针做函数参数)。 #include<stdioh>
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<slength();i++){
sum +=IntegerValueOf(scharAt(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<stdioh>
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 "stdafxh"#include "processh"double getsum(double a, double b, double c);声明函数 参数为double类型的指针int main(int argc,char argv[]){double sum=new double;sum = 0;double x = 133332;double y = 21;double z = 64;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 );}
processh说明进程管理的各个函数,spawn…和EXEC …函数的结构说明。
提供了两个对多线程进行支持的函数,即线程的创建和终结
没有对线程挂起和恢复进行 *** 作的函数,通常,这两项功能使用win32 api完成。
2关于这个里面都包含什么吧你自己看看这个吧!我表示无力打上来
https://enwikipediaorg/wiki/C_file_input/output
/
程序描述:设计一个表示日期的结构体。编写一个函数,计算两个日期之间差多少天。在 main 函数 中调用该函数,并显示。
/
#include <stdioh>
#include <stdlibh>
#include <mathh>
#define LEAP_YEAR 366
#define COMMON_YEAR 365
int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
struct date
{
int year;
int month;
int day;
}date1,date2;
typedef struct date DATE;
void interval_days()
{
int i,result,sum1,sum2;
printf("请输入第一个日期: ");
scanf("%d-%d-%d",&date1year,&date1month,&date1day);
if(date1year<=0 || date1month<=0 || date1month>12 || date1day<=0 || date1day>31)
{
printf("输入错误,请准确输入日期!\n");
exit(-1);
}
printf("请输入第二个日期: ");
scanf("%d-%d-%d",&date2year,&date2month,&date2day);
if(date2year<0 || date2month<0 || date2month>12 || date2day<0 || date2day>31)
{
printf("输入错误,请准确输入日期!\n");
exit(-1);
}
//算法思路:我们以公元1年1月1日为基准,分别计算间隔天数,然后两者相减就是这两个日期的间隔天数了
sum1=sum_days(&date1);
sum2=sum_days(&date2);
result=abs(sum1-sum2);
printf("日期之差为: %d\n",result);
}
int sum_days(DATE date)
{
int i,sum;
//计算公元1年1月1日到某年的1月1号的天数
for(i=1,sum=0;i<date->year;i++){
if(i%400==0 || (i%4==0 && i%100!=0))
sum+=LEAP_YEAR;
else
sum+=COMMON_YEAR;
}
//计算该年的1月1号到该日期的天数
for(i=0;i<date->month-1;i++){
sum+=days[i];
}
if(date->month>2 && (date->year%400==0 || (date->year%4==0 && date->year%100!=0)))
sum+=date->day+1;
else
sum+=date->day;
return sum;
}
int main()
{
interval_days();
return 0;
}
这是我的程序思路,仅供参考,你可以用手机上的日历的日期换算功能验证下哈。示例运行结果如下:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)