0331.h

#ifndef _0331_H
#define _0331_H
/*******************************************************************
* 文件名称:0331.h
* 功能描述:函数的定义和调用的头文件
* 创建作者:wenjie
* 创建日期:2023/03/31
*******************************************************************/

typedef struct {
	int x;
	int y;
} Point;

//------------------------------------------------------------------
// 函数声明
//------------------------------------------------------------------
/**
 * @brief 计算两个数的和
 *
 * @details 这个函数使用加法运算符计算两个整数之和
 *
 * @param a 第一个加数
 * @param b 第二个加数
 * @return 两个数的和
 */
int add(int a, int b);

/**
 * @brief 指针传递
 *
 * @details 指针传递
 *
 * @param ptr 传入实参地址
 * @return 无
 */
void foo(int *ptr);

/**
 * @brief 引用传递
 *
 * @details 定义函数,使用引用传递
 *
 * @param a
 * @param b
 * @return 无
 */
 // 
void swap(int &a, int &b);

void print_point(Point p);

void print_string(const char *str);

#endif //_0331_H

0331.cpp

/*******************************************************************
* 文件名称:0331.cpp
* 功能描述:函数的定义和调用的实现
* 创建作者:wenjie
* 创建日期:2023/03/31
*******************************************************************/

#include "0331.h"
#include <iostream>


int main() {

	// 调用 add 函数,计算 3 和 5 的和
	int sum = add(3, 5);
	// 打印计算结果
	std::cout << sum << std::endl;

	int x = 1;    //&x为1的门牌号(地址)
	foo(&x);      // 传递实参的地址
	printf("%d\n", x); // 输出 42

	int x2 = 1, y = 2;
	swap(x2, y); // 传递实参的别名
	printf("%d %d\n", x2, y); // 输出 2 1

	Point p = { 1, 2 };
	print_point(p);

	const char *str = "Hello, world!";
	print_string(str);

	return 0;

}

/**
 * @brief 计算两个数的和
 *
 * @details 这个函数使用加法运算符计算两个整数之和
 *
 * @param a 第一个加数
 * @param b 第二个加数
 * @return 两个数的和
 */
int add(int a, int b) {
	return a + b;
}

/**
 * @brief 指针传递
 *
 * @details 指针传递
 *
 * @param ptr 传入实参地址
 * @return 无
 */
void foo(int *ptr) {
	*ptr = 42; // 修改实参的值

}

/**
 * @brief 引用传递
 *
 * @details 定义函数,使用引用传递
 *
 * @param a
 * @param b
 * @return 无
 */
void swap(int &a, int &b) {
	int temp = a;
	a = b;
	b = temp;
}

// 打印结构体成员
void print_point(Point p) {  
	printf("(%d, %d)\n", p.x, p.y);
}

void print_string(const char *str) {
	/*
	是的,你说得没错。在函数内部,可以修改指针本身,但不能修改指针所指向的常量的值。
	在你的代码中,指针 str 是一个形参,它被声明为指向常量字符的指针。这意味着,该指针所指向的字符数组是只读的,不能被修改。
	在函数内部,如果你试图通过指针 str 来修改其所指向的字符串的内容,编译器会发出警告或错误信息。
	而如果你仅仅是修改指针本身的值,那么编译器并不会报错。
	因此,在下面的代码中,指针 str 指向了一个新的字符串常量,但原有的字符串 "Hello, world!" 并没有被修改:
	输出结果应该是 hbashab,而不是 "Hello, world!"。这表明在函数内部,指针 str 确实被修改了,但原始字符串并没有被改变。
	*/
	//str = "hbashab";   
	printf("%s\n", str);
}