C++拾遗

记录一些刷题过程中遇到的和C++有关的问题

参数传递问题

1
2
3
4
void InitADT(ADT *adt){
adt->score = 100;
adt->age = 21;
}

** a代表声明形参接收传入的实参的值 用 ** 传值失败 形参上改变了数值,没有在实参上改变数值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<stdio.h>
void myswap(int x, int y)
{
int t;
t=x;
x=y;
y=t;
}
int main()
{
int a, b;
printf("请输入待交换的两个整数:");
scanf("%d %d", &a, &b);
myswap(a,b); //作为对比,直接交换两个整数,显然不行
printf("调用交换函数后的结果是:%d 和 %d\n", a, b);
return 0;
}
// 获得结构体中的数据的方法 打点
void GetADT(ADT adt){
printf("%d", adt.age);
}

a代表传入实参的地址 以地址的形式间接引用 传地址成功的原因利用指针改变了原来的地址,所以实参就交换了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<stdio.h>
void myswap(int *p1, int *p2)
{
int t;
t=*p1;
*p1=*p2;
*p2=t;
}
int main()
{
int a, b;
printf("请输入待交换的两个整数:");
scanf("%d %d", &a, &b);
myswap(&a,&b); //交换两个整数的地址
printf("调用交换函数后的结果是:%d 和 %d\n", a, b);
return 0;
}
// 获得结构体中的数据的方法 箭头
void GetADT(ADT *adt){
printf("%d", adt->age);
}

&a代表直接传入实参 直接引用 引用是直接改变两个实参变量a,b的值,所以就交换了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<stdio.h>
void myswap(int &x, int &y)
{
int t;
t=x;
x=y;
y=t;
}

int main()
{
int a, b;
printf("请输入待交换的两个整数:");
scanf("%d %d", &a, &b);
myswap(a,b); //直接以变量a和b作为实参交换
printf("调用交换函数后的结果是:%d 和 %d\n", a, b);
return 0;
}

// 获得结构体中的数据的方法 打点
void GetADT(ADT &adt){
printf("%d", adt.age);
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!