函数:
函数返回值本身可以是常量,变量.若返回类型为double但返回的是int类型,则会强制转换.
C++对返回值的一个限制是-----不能是数组(但传入数组头指针和长度,返回地址就好),可以是其他任何类型,包括结构和对象.
原型描述函数到编译器的接口,描述了函数返回值的类型,和参数的类型,因此函数的原型不要求提供变量名,有类型列表就好了
函数被调用时,会创建一个新的与参数同名同类型的变量,并将其初始化,因此函数内部对参数的处理不会影响函数原来的数据.
1.如何使用指针来处理数组
用数组名来标记储存位置,对数组名使用sizeof将得到整个数组的长度. 取址符用于数组名将放回整个数组的地址(整个内存块的地址).
cin >> temp; // 从输入读取一个值到变量 temp
if (!cin) {
// 检查 cin 的状态,如果输入失败(可能是因为输入的值不符合预期类型),则进入这个条件
// 在这里可以处理输入失败的情况
cin.clear(); // 清除错误状态
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 清空输入缓冲区
}
数组处理函数的常用编写方式
如果函数要修改数组:
void modify(double ar[], int n);
如果函数不修改数组:
void no_modify(const double ar[], int n);
2二维数组当作函数参数
//当二维数组当作函数参数
int data[3][4] = {{....},{..},{..}};
一般上第一个参数为int (*data) [4] 或者 Int ar2[][4]
第二个为row
ar2[r][c] == *(*sr2 + r) + c)
3.将c风格字符串当作函数参数
1.char数组
2.用" "括起的字符串常量
3.被设置为字符串的地址的char指针
其中char ghost [15] = "galloping";
char *str = "galloping"; 其中ghost和str都代表首地址
在函数中处理字符串中字符的方式:
while (*str)
{
...;
str++;
}
其中只要字符不为空值字符'\0' ,*str就为非零值,因此循环继续
返回字符串首地址:
cout <<字符串首地址 ->可以返回整个字符串.
3. 结构体可以作为函数的参数,返回值
4.将string数组作为参数传入函数时,可以将起参照int数组
#include <iostream>
int add(int a, int b)
{
return a + b;
}
int subtract(int a, int b)
{
return a - b;
}
int main()
{
// 声明一个函数指针,并将其初始化为指向add函数
auto func_ptr = add;
// 使用函数指针调用add函数
int result = func_ptr(5, 3);
std::cout << "Addition result: " << result << std::endl;
// 将函数指针指向subtract函数
func_ptr = subtract;
// 使用函数指针调用subtract函数
result = func_ptr(5, 3);
std::cout << "Subtraction result: " << result << std::endl;
return 0;
}
在这个示例中,我们首先定义了两个函数
add()
和subtract()
,它们分别接受两个整数参数并返回结果。然后,在
main()
函数中,我们声明了一个auto
类型的变量func_ptr
,它是一个函数指针。通过将其初始化为add
函数,func_ptr
现在指向add
函数。我们使用函数指针调用
add
函数,并将结果存储在result
变量中,然后将结果打印出来。接下来,我们将函数指针重新赋值为
subtract
函数,然后再次使用函数指针调用subtract
函数,并将结果存储在result
变量中,并打印出来。这个示例展示了如何使用
auto
关键字声明一个函数指针类型的变量,并将它与不同的函数进行动态绑定和调用。