十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这里的friends[]是什么意思?
鹿寨网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设等网站项目制作,到程序开发,运营维护。创新互联从2013年开始到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
是friends[0]么?
这里的friends[]是表示函数的形参是一个数组,在调用该函数时,传递的实参必须是一个数组名(比如,有int a[10]; 在传递的时候就传a),或者是数组首元素的地址(a[0])。
void add(struct friends_list friends[]);
这个函数传递的是friends[]数组中的哪个元素?
不是传递的数组哪个元素,而是传递的数组首地址,friends[]相当于*friends。然后可以根据指针地址的加减操作,访问其他元素的地址,以及地址对应的值。
请参考你前一个问题的回答。
#include"stdio.h"//printf的头文件
void func1(int i);//对于函数1的提前声明
void func2(int i);//对于函数2的提前声明
char st[]="hello,friend";//定义一个长度为12的字符数组
//c++里所有的数组都是从0开始计数的哦
void func1(int i) { //其实如果提前声明了↑↑(第2行),这个函数还可以写在主函数(main)的后面
printf("%c",st[i]);//等于putchar(st[i]); 作用:输出一个字符
if(i3) {//等于i=2 判断i是否小于3
i+=2;//等于i=i+2,表示i自增2
func2(i);//调用func2函数
}
}
void func2(int i) {
printf("%c",st[i]);//一样的
if(i3) {//还是一样的
i+=2;//...
func1(i);//再调用func1函数
}
}
main() {//主函数可以不写"int main()",但在一些比赛中是不允许的。
int i;//定义一个局部变量
i=0;//把i的值设为0
func1(i);//调用func1(0)
printf("\n");//输出换行
//其实最好要再写一个"return 0;"结束程序
}
/*
程序流程:
主函数内调用func1(0):
输出st[0]-h
i3? (i=0) - i3
i+2 i=2 调用func2(2):
输出st[2]-l
i3? (i=2) - i3
i+2 i=4 调用func1(4):
输出st[4]-o
i3? (i=4) - i3
返回!
返回!
返回!
返回!
返回!
返回!
返回!
输出换行
结束程序
*/
完全没有必要去死记硬背,其实只要你有一点英语功底,会发现他和英语没什么两样,通过把它们变成英语后翻译过来是很容易的。
另一个方法是 多看多做
C++ 关键字
asm 插入一个汇编指令.
auto 声明一个本地变量.
bool 声明一个布尔型变量.
break 结束一个循环.
case 一个switch语句的一部分.
catch 处理 thrown 产生的异常.
char 声明一个字符型变量.
class 声明一个类.
const 声明一个常量.
const_cast 从一个const变量中抛出.
continue 在循环中间断循环.
default 是一个case语句中的缺省项.
delete 释放内存.
do 构造循环体.
double 声明一个双精度浮点变量.
dynamic_cast 动态投射.
else 是一个if语句中的预备条件.
enum 创建列举类型.
explicit 仅用在构造器的正确匹配.
extern 告诉编译器在别的地方变量已经被定义过了.
false 属于布尔值.
float 声明一个浮点型变量.
for 构造循环.
friend 允许非函数成员使用私有数据.
goto 跳转到程序的其它地方.
if 从一次判断的结果处执行代码.
inline 定义一个函数为内联.
int 声明一个整型变量.
long 声明一个长整型变量.
mutable 忽略const变量.
namespace 用一个定义的范围划分命名空间.
new 允许动态存储一个新变量.
operator 创建重载函数.
private 在一个类中声明私有成员.
protected 在一个类中声明被保护成员.
public 在一个类中声明公共成员.
register 定义一个寄存器变量.
reinterpret_cast 改变一个变量的类型.
return 从一个函数中返回.
short 声明一个短整型变量.
signed 修改变量类型声明.
sizeof 返回一个变量或类型的长度.
static 给一个变量创建永久的存储空间.
static_cast 执行一个非多态性cast.
struct 创建一个新结构体.
switch 让一个变量在不同的判断下执行不同的代码.
template 创建一个给特殊函数.
this 指向当前对象.
throw 抛出一个异常.
true 布尔类型的一个值.
try 执行一个被throw 抛出的异常.
typedef 从现有的类型中创建一个新类型.
typeid 描述一个对象.
typename 声明一个类或未定义的类型.
union 一个结构体在当前位置分配给多个变量相同的内存.
unsigned 声明一个无符号整型变量.
using 用来输入一个namespace.
virtual 创建一个不被已构成类有限考虑的函数.
void 声明函数或数据是无关联数据类型.
volatile 警告编译器有关的变量可能被出乎意料的修改.
wchar_t 声明一个带有宽度的字符型变量.
while 用来构成循环
主函数中func1(i)也就是func1(0);所以打印出str[0],也就是h,
0是小于3的,所以i=i+2,此时i的值为2,func2(i)就是func(2),所以打印出
str[2],也就是l,
2是小于3的,i=i+2,此时i的值为4,func(i)就是func(3),所以打印出str[4],
也就是o。
所以程序运行的结果是hlo。
错误在于,
1.
friend int A( );
在一个类中声明了一个与类名相同的友元函数(A()),
结果会导致友元函数被当成类的构造函数,
编译器会报 “构造函数不能指定返回类型”的错误。
2.
static friend int f( );
函数f()不能同时声明为static 函数和友元函数,
不然会报“储存类说明符在友元函数声明中无效”的错误。
函数被声明为友元函数后,
也就有了extern的属性,
而extern 和static 可以说是互相对立的,
所以如果先什么为友元函数后再声明函数为static函数,
也会报错—— “‘static’和就说明符‘extern’冲突”
in a word,static 和 friend 不能同时存在于一个函数
3.
反驳一下一楼观点。
一楼观点有误。
友元函数(g)可以直接访问对象的私有成员(a.a)。
就酱紫,楼主有什么问题再追问嗯,
望采纳(●'◡'●)~
void printAll (friend_list friList[], int *friNum)
这是一个函数的定义
void 函数无返回值
printAll 函数的名字,命名规则可能是用来输出所有数组成员
这个函数有两个参数
friend_list friList[] 是一个数组的引用(指向friend_list 类型数组的指针)
int *friNum 是一个整型的指针
这个函数按常见程序的设计思路,可能在外部有一个friend_list 类型的数组,这个数组已经通过其他方法存入了数据,然后定义了一个 整型变量。 把两个指针传入你的函数中,函数内容应该做了输出处理,friNum 是一个计数算器,用于记录数组成员的总个数。
因为你没有贴出源码(函数的具体实现)以个思路仅为我的分析