hyqd.net
当前位置:首页 >> C语言中指针作为实参使用SWAP函数的问题。 >>

C语言中指针作为实参使用SWAP函数的问题。

你的这个swap中指针参数 *a,*b 已经退化成普通的局部参数了,也就是说a和b同样也只是形参而已,只不过披了个指针的外衣,在函数体内交换的只是这两个指针本身的拷贝,而不是它们指向的内容,因此需要用解除指针的方式来交换它们指向的内容.其实这里提供指针做参数,只是为了让你有办法去访问它们的实际指向内容(实参),指针本身(形参)的交换没有任何意义.有两种改法:1.void swap(int *a, int *b){ int t = *a; *a = *b; *b = t;}2.void swap(int &a,int &b){ int t = a; a = b; b = t;}swap(i,j);

没有任何错误啊!p1,p2本来就是int*类型的,swap参数也是int*类型的, if(a>b) swap(p1,p2);这一句没错啊!swap本来就需要指针变量,p1,p2正好又是指针变量,直接写上去就可以了!swap() 中是 int *p1 和int *p2这是因为这是swap的定义,既然是定义就要声明参数的类型,这里声明的是int*类型,那使用的时候就要传递int*类型的.主函数里的类型也是int*,对应上了,就可以了.在定义变量的时候,建议你把*和数据类型当做一个整体,看成一种新的数据类型,不要把*和变量看做一个整体.比如int* p,int*是一个数据类型,p是变量名.

第一问: 你说的是对的.表扬! 第二问,不是改动s的值,由于a[2]和a[3]都数数组a 中的单元,所以他们的地址的相邻的,直接使用 s+1;就可以了 s+1 就是将s 指向的地址 向前指一下,但是 并不改动s的指向的地址, 因为没有出现赋值语句,如s++ s++ 就是将s的地址向前移动一下, 就不符合你想要的了 s+1 你可以这样理解, 假如s=100 s+1 请问s的值变了没,没变吧, 但是s++ 就变成了 101

假设你使用的c语言 #include void swap(int* a,int* b)// a,b指针做形参 { int temp=*a;// 暂存指针a所指变量的值 *a=*b;// 指针b所指的值赋值给a所指变量 *b=temp;// 指针b所指变量的值变为原先a所指的值 } int main(void) { int a=10,b=20; swap(&

类型匹配,这个void*目的是传入任意类型的指针,将所有的指针都按照字节读取,第三个参数是计算的字节数,所以用char*或byte*都可以,内部其实可以改成int *来实现 将一段长度为iDataSize的缓冲区互换,这个缓冲区可以是数组也可以是字符串甚至其他任意类型,这个函数写成比较通用的了

c语言函数都是通过传值方式将实参传递给形参.至于这个值是数值还是内存地址,有很大区别 如果定义成swap(int a,int b),实际传递a、b的数值,不会更改其真实值的,因为在函数swap内交换的是a与b的复制品 如果定义成swap(int* a,int* b),

void swap(int* a, int* b){int t = *a;*a = *b;*b = t;}swap(&a, &b);

#include<stdio.h>void swap(int x,int* y){ int t; t=x; x=*y; *y=t;}int main(){ int a=5,b=10; swap(a,&b); printf("%d,%d\n",a,b); return 0;}swap函数第一个是值传递,第二个传递的是指针,值传递为单项传递,相当于运行swap时,又创建了一个内存存放a的数值,但是指针传递不创建新的内存,所以都是5

#1 void swap(int a[]);#2 swap(array);#3 temp=a[0];#4 a[0] = a[1];#5 a[1] = temp;

这程序是你写的吗? 要是你写的话 你就看下面的三段话 就能找出.1. 比如你定义一个函数void add(int a, int b),这里的a和b就是形参.2. 当你进行函数调用的时候,add(1, 2),这里的1和2就是实参.3.形参就是没有赋值的变量,实参就是有赋值的变量

网站首页 | 网站地图
All rights reserved Powered by www.hyqd.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com