别重写我的函数
时间: 2023-10-18 07:09:46 浏览: 26
好的,下面是使用一个指针变量调用你写的函数的示例代码:
```c
int LocatVex(AdjList *G, Data v) {
int i;
for (i = 0; i < G->vexnum; i++) {
if (G->vertex[i].data == v) {
return i;
}
}
return -1;
}
int main() {
AdjList G;
AdjList *pG = &G;
/* 假设已经初始化了 G */
Data v = 5;
int index = LocatVex(pG, v);
return 0;
}
```
在这个示例中,我们定义了一个 `AdjList` 类型的变量 `G`,并且已经初始化完成。然后我们定义了一个指向 `AdjList` 类型的指针变量 `pG`,将 `&G` 赋值给指针变量 `pG`,即将 `G` 的地址传入指针中。接下来,我们定义了一个 `Data` 类型的变量 `v`,并赋值为 5,表示要查找值为 5 的结点在图中的位置。最后,我们调用 `LocatVex` 函数,将 `pG` 作为第一个参数,实现使用指针调用函数。函数返回值为结点的位置下标,存储在 `index` 变量中。
相关问题
重写printf函数
重写printf函数需要学习可变参函数的实现。可变参函数的参数是从右向左逐次压栈的,所以我们需要定义一个函数,接收可变数量的参数,并将这些参数按照格式化字符串的要求进行处理。一个简单的重写printf函数的示例代码如下所示:[1]
```c
char buf[256];
int printf(const char *format, ...)
{
va_list args;
va_start(args, format);
vsprintf(buf, format, args);
va_end(args);
usrt_send(buf, strlen(buf));
return 0;
}
```
在这个示例中,我们定义了一个名为printf的函数,它接收一个格式化字符串和可变数量的参数。我们使用va_list、va_start、vsprintf和va_end这些宏来处理可变参数。首先,我们使用va_start宏初始化一个va_list类型的变量args,然后使用vsprintf将格式化字符串和可变参数格式化到一个缓冲区buf中。最后,我们使用usrt_send函数将buf发送出去。这样,我们就实现了一个简单的重写printf函数。[1] [2] [3]
但是我没有重写任何函数啊
如果你没有重写任何函数,那么就不需要使用重写说明符。如果你在函数声明或定义的开头使用了 `override` 或 `final` 关键字,编译器会认为你试图重写一个不存在的函数,从而引发错误。
因此,如果你只是想定义一个返回类型为另一个类的成员函数,你应该只需要在函数声明或定义中指定正确的返回类型,并省略任何重写说明符。例如:
```
class B {};
class A {
public:
B getB() {
return B();
}
};
```
在这个例子中,我们定义了一个类 A 和一个类 B,然后在类 A 中定义了一个返回类型为 B 的成员函数 `getB()`。注意,在函数声明或定义中没有使用任何重写说明符,因为我们只是想定义一个普通的成员函数,而不是重写一个基类函数。