day3 函数的定义和调用,练习编写简单的程序(记录3)
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);
}