C语言.定义一个函数实现交换两个整数的功能,(用指针做函数参数)。

C语言.定义一个函数实现交换两个整数的功能,(用指针做函数参数)。,第1张

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 );}

首先,弄懂函数参数都是靠值传递。指针也是。

进入函数后,函数创建几个空间给形参,再把实参数值拷过来。退出函数时,把形参空间释放,则影响不到实参。这就是值传递。

swap(int p1,int p2)函数首先创建两个空间,是指针,再把实参复制过来,即p1=pointer_1=&a,p2=pointer_2=&b,改变p1,p2就分别指向了a,b改变p1指向的值就是改变了a。然后交换p1,p2,ab就互换了。函数退出,释放p1,p2所占的内存空间。但是a,b值互换了。swap函数没有改变实参pointer_1,pointer_2的内容,只是借助指针实现了巧妙的乾坤大挪移。

学到c++后有个引用例外,那是后话了。

++++++++++++++++++++++华丽丽的分割线+++++++++++++++++++++

其实很简单,不要硬记规律,要理解了。

第二个例子中swap(int x,int y)没有改变原来实参a,b的值

第一个例子中swap(int p1,int p2)也没有改变原来两个实参pointer_1,pointer_2的值,他们值分别是是a,b地址,但pointer_1,2指向的内容改变了,改的是以pointer_1,pointer_2的值为地址的内存单元的值。

看你的需要了,有时不用指针作为参数达不到你要的效果,比如一个swap()函数。

int

swap(int

a,int

b)

{

int

tmp;

tmp=a;

a=b;

b=tmp;

}

如果你想调用该函数交换两个变量的值,在主函数中输出,那是不可能的。比如这样调用:

int

x=1,y=2;

swap(x,y);

printf("%d

%d",x,y);

你认为会输出2

1吗?错!还是会输出1

2的。因为传入swap()函数的只是x,y的拷贝,而不是它们自身。

如果要真正达到交换的目的,就要用指针传值。这样定义函数:

void

swap(int

a,int

b)

{

int

tmp;

tmp=a;

a=b;

b=tmp;

}

但是给函数传值时要注意,指针是指向地址的,所以参数要是地址,即需要给变量取地址。

int

x=1,y=2;

swap(&x,&y);

printf("%d

%d",x,y);

这样就是输出2

1了!

是一样的,pi=&i只是在定义的时候把

i

的地址给

pi指针(px指向x的地址)。“为什么右边同样是地址,左边不相等呢?”这段不知道什么意思?

它们的区别是

左边是利用返回值来读函数,而右边是利用函数调用,

因为只有只有指针才能修改地址的值,要传个地址给它,调用函数中的max要取

,获取它的值。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12182245.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存