- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前遇到一个问题,在你看它之前,请尝试认为我只是一个尝试使用带有函数的指针的初学者。
我解释一下自己:我需要有一个菜单( Function )可以调用任何其他函数,但我的问题是我从我的“main”调用我的函数,所以我尝试在我的函数中使用指针。我刚刚学习如何使用指针,所以这是我现在想到的第一件事。
也许这是错误的方法,我仍在互联网上搜索如何做或正确做。
现在我收到此错误消息:
lvalue required as unary ‘&’ operand
这是我更正后的代码:(为了最大程度的可读性而进行了简化)
#include <stdio.h>
#include <stdlib.h>
void Menu(char *PointeurNameHuman, int *PointeurChoix, int *PointeurChoix1, int *PointeurChoix2, int *PointeurChoix3, void *PointeurWelcome())
{
printf("\n\nEnter your choice: \n ");
scanf("%d", PointeurChoix);
while ((*PointeurChoix != 1) || (*PointeurChoix != 2) || (*PointeurChoix != 3))
{
if (*PointeurChoix == *PointeurChoix1)
{
printf("\n! Play! \n ");
PointeurWelcome(PointeurNameHuman);
return 0;
}
else if (*PointeurChoix == *PointeurChoix2)
{
return 0;
}
else if (*PointeurChoix == *PointeurChoix3)
{
return 0;
}
}
}
void Welcome(char *PointeurNameHuman)
{
printf("\n\nWelcome %s \nPlease enter your name: ", PointeurNameHuman);
}
int main(int argc, char *argv[])
{
char NameHuman[] = "HUMAN";
int Choix, Choix1 = 1, Choix2 = 2, Choix3 = 3;
char *PointeurNameHuman = &NameHuman;
int *PointeurChoix = &Choix;
int *PointeurChoix1 = &Choix1;
int *PointeurChoix2 = &Choix2;
int *PointeurChoix3 = &Choix3;
void Welcome(PointeurNameHuman);
void (*PointeurWelcome)() = &Welcome; // OLD Error
Menu(PointeurNameHuman,PointeurChoix,PointeurChoix1,PointeurChoix2,PointeurChoix3,PointeurWelcome);
}
也欢迎所有关于如何简化我的代码的评论!预先感谢您的所有回答,祝您度过愉快的一天/一夜。
编辑:感谢“b4hand”的快速回答,你为我指明了解决问题的正确方向。
最佳答案
这个声明没有意义:
void Welcome(char *PointeurNameHuman[50])
您的意思可能是以下内容吗?
void Welcome(char *PointeurNameHuman)
此外,这一行是错误的:
void *PointeurWelcome = &Welcome(PointeurNameHuman);
您可能也是这个意思:
void (*PointeurWelcome)() = &Welcome;
同样这一行很奇怪:
char NameHuman[50] = "HUMAN";
通常,当您使用常量数据初始化数组时,不会声明数组大小。相反,你可以这样写:
char NameHuman[] = "HUMAN";
这样做的优点是您不会在常量中包含所有额外的尾随零字节。
此外,当您调用 PointeurWelcome
时,Menu
内的位置在代码中的该点未声明。该变量在该范围内不存在。
此外,在Menu
内部,人们通常使用局部变量从scanf
读取数据。例如,像这样:
int Choix;
scanf("%d", &Choix);
而不是你拥有的。
我强烈建议您启用编译器警告,因为您可能会发现您犯的其他几个错误。
关于调用函数 - 获取 "lvalue required as unary ‘&’ 操作数”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26246538/
这个问题在这里已经有了答案: The "++" and "--" operators have been deprecated Xcode 7.3 (12 个答案) 关闭 5 年前。 我刚刚将我的应
在下面的代码片段中,为什么行 o.margin() = m; 编译没有错误?它很容易得到警告,因为它几乎总是一个错误。我实际上会认为这是一个错误,因为它会将 R 值放在赋值的左侧。 #include
我是 C 语言的新手。我对左值错误有疑问。据我所知,当没有永久地址承载变量来存储右值时,我们会得到一个左值错误。在这里,我可以在左侧看到一个变量。但是,我仍然得到左值错误。有人可以澄清我对左值或所用运
#include int main(){ int i=0,j=1; printf("%d",++(i+j)); return 0; } 在这段代码中,我使用了增量运算符,但我不
#include int main() { int ary[2][3]; foo(ary); } void foo(int (*ary)[3]) { int i = 10,
这个问题已经有答案了: Error: lvalue required in this simple C code? (Ternary with assignment?) (4 个回答) lvalue
我无法理解这段代码为何有效。我进入 C# 世界已经有一段时间了,想在深入研究 C++11 中的新内容(如 RValue Refs 和移动语义)之前先复习一下 C/C++。 我想知道为什么我编写的这段代
我想使用以下我认为不标准的成语。我有利用返回值优化返回 vector 的函数: vector some_func() { ... return vector( /* something
谁能帮我弄清楚为什么我在最内层的循环程序中总是出错 * 突出显示它必须是一个可修改的 lValue。 using namespace std; #include int main() { /
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
有很多关于模板参数推导的讨论和澄清,特别是引用折叠和“通用引用”。本题通过相关细节:How does auto deduce type? ,而 Scott Meyers 的这篇论文更详细,可能会提供更
在下面的代码中: _imageView.hasHorizontalScroller = YES; _imageView.hasVerticalScroller = YES; _imageView.au
我有以下 C++ 代码,当我编译它时出现“需要左值”错误。请指出我哪里出错了。谢谢。 #include #include void main() { clrscr(); char r[5]
所以 Move 语义很棒,给了我们更高的性能。 我读到这是一个全新的特性,如果没有 C++11,这是“不可能”做到的。 但是我们可以在 C++11 之前做到这一点吗?就像下面这样。 class AAA
根据我的理解,在下面代码中标记为“第 2 行”的行中,表达式 (*ptr)++ 应该生成“需要左值”错误,因为 *ptr 的计算结果为 i=1 的常量值,这不是左值? 那么为什么程序能成功运行呢?还是
多年来,我一直在使用包含以下条件的代码 ref \$_[0] eq 'SCALAR' 我一直希望有一个 ARRAY 或 SCALAR,但最近我将 substr() 传递给了那个参数。意想不到的事情发生
好的,代码是: vector> imageFiltered; // some processing codes here parallel_for( blocked_range(0, imageFil
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
#include main() { int x,n,r; scanf("%d" , & x); for (n=2;n<(x/2);n++) { (x%n=r);
这个问题已经有答案了: Assignment statement used in conditional operators (6 个回答) 已关闭 5 年前。 #include int main()
我是一名优秀的程序员,十分优秀!