用代码来举例在c++中指针和引用的联系
时间: 2023-05-29 21:07:59 浏览: 64
以下是在C语言中指针和引用的联系的示例代码:
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void swap_ref(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 5, y = 10;
// 使用指针来交换x和y的值
printf("初始值:x=%d, y=%d\n", x, y);
swap(&x, &y);
printf("交换后的值:x=%d, y=%d\n", x, y);
// 使用引用来交换x和y的值
printf("初始值:x=%d, y=%d\n", x, y);
swap_ref(x, y);
printf("交换后的值:x=%d, y=%d\n", x, y);
return 0;
}
在上面的代码中,我们定义了两个函数swap和swap_ref,它们都有两个参数a和b,用于交换两个整数的值。在swap函数中,我们使用指针来交换a和b的值,而在swap_ref函数中,我们使用引用来交换a和b的值。在main函数中,我们分别调用了这两个函数来交换两个整数x和y的值,并输出了交换后的结果。
相关问题
纯虚函数与虚函数的区别并且用C++代码来举例
纯虚函数和虚函数都是在C++中用于实现多态性的重要概念。虚函数是一个可以被子类重写的函数,而纯虚函数则是一个没有实现的虚函数,必须由子类实现。
下面是一个用C++代码举例说明纯虚函数和虚函数的区别:
```c++
#include <iostream>
using namespace std;
class Shape {
public:
// 纯虚函数
virtual void draw() = 0;
// 虚函数
virtual void print() {
cout << "This is a shape." << endl;
}
};
class Circle : public Shape {
public:
void draw() {
cout << "Drawing a circle." << endl;
}
void print() {
cout << "This is a circle." << endl;
}
};
int main() {
Shape* shape = new Circle();
shape->draw(); // 调用子类的实现
shape->print(); // 调用子类的实现
delete shape;
return 0;
}
```
在上面的代码中,Shape类是一个抽象类,它包含一个纯虚函数draw()和一个虚函数print()。Circle类是Shape类的子类,它实现了draw()函数并重写了print()函数。
在main()函数中,我们创建了一个指向Circle对象的Shape指针,然后调用了它的draw()和print()函数。由于draw()是一个纯虚函数,它必须由子类实现,因此调用的是Circle类的实现。而print()是一个虚函数,它被子类重写了,因此也调用了Circle类的实现。
总之,纯虚函数和虚函数都是用于实现多态性的重要概念,它们的区别在于纯虚函数必须由子类实现,而虚函数可以有默认实现。
用c/c++代码举例说明文件句柄在进程间传递
在C/C++中,文件句柄通常是通过整数来表示的。下面是一个简单的例子,说明如何在进程之间传递文件句柄。
首先,我们需要在一个进程中打开一个文件,并获取该文件的文件句柄:
```c++
#include <fcntl.h>
#include <unistd.h>
int main() {
int fd = open("test.txt", O_RDONLY); // 打开文件 test.txt
// fd 是文件句柄
// ...
close(fd); // 关闭文件句柄
return 0;
}
```
接下来,我们可以使用Linux系统调用`fork()`创建一个子进程,并在子进程中使用`dup()`函数复制文件句柄:
```c++
#include <fcntl.h>
#include <unistd.h>
int main() {
int fd = open("test.txt", O_RDONLY); // 打开文件 test.txt
// fd 是文件句柄
pid_t pid = fork(); // 创建子进程
if (pid == 0) { // 子进程
int new_fd = dup(fd); // 复制文件句柄
// new_fd 是新的文件句柄
// ...
close(new_fd); // 关闭新的文件句柄
return 0;
} else if (pid > 0) { // 父进程
// ...
} else { // 创建子进程失败
perror("fork() failed");
return -1;
}
close(fd); // 关闭文件句柄
return 0;
}
```
在子进程中,我们使用`dup()`函数复制文件句柄,并获得一个新的文件句柄。此时,父进程和子进程都有了该文件的文件句柄。
需要注意的是,文件句柄是进程私有的,也就是说,父进程和子进程拥有各自独立的文件句柄。因此,在子进程中对文件的操作不会影响父进程对同一文件的操作。