- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我这里有这段代码,它给了我编译器错误,我知道这里还有许多其他问题,其标题基本上完全相同;我已经阅读了其中不少内容,但还没有回答我所有的问题。过去几天,我在 stackoverflow 和教学网站上读了很多关于指针和结构的内容,又是几十个,我觉得我只需要在我面前有一个物理示例来剖析和解释。我觉得我知道大部分这些东西,但我对自己的不确定性比我想要的还要多。如果有人可以帮助我了解发生了什么事。我在下面发布了一个编号列表,告诉您我认为正在发生的事情,并希望我在大多数情况下是对的,少解释一下您必须做的事情,哈哈,开玩笑。这是代码。
struct foo{
int num;
char *word;
struct foo *ptr;
};
void func1(struct foo*);
void func2(struct foo);
int main() {
struct foo a;
a.num = 20;
a.word = "wordOne";
func1(&a);
printf("%d %s", a.num, a.word); // refer to #3 below.
a.ptr = &a;
a.num = 55;
a.word = "thirdToLastWord";
func2(a);
printf("%d %s\n", a.num, a.word);
}
void func1(struct foo *a)
{
while(*(a->word) != '\0')
{
putchar(*(a->word));
a->word++;
}
putchar('\n');
if(a->num % 10 != 0)
{ a->num *= 2; }
a->word--;
printf("num equals %d\n", (*a).num);
}
void func2(struct foo a)
{
if((*a).num == a->ptr->num) //compiler error
{(*a).num = (*((*a).ptr)).num +1; } //compiler error
else { a->num = 200; }
a->word = "wordsix";
a->ptr->word = "wordseven";
printf("function 2 %d %s\n", (*a).num, (*((*a).ptr)).word);}
}
好的。所以我想我理解了第一个功能。但是,如果我错了或者我似乎对它为什么这样做有错误的理解,请纠正我以下的任何内容。
1) 在 main func1 将结构体“foo”声明为指针之前。当调用 func1 时,我们传入“a”的地址,这样我们就知道要指向哪个地址。
2) func1 中的所有内容都会更改原始结构。在 func1 外部打印时,该单词会递减,仅显示最后一个字母“e”。
3) 在我评论的 #3 行中,它打印出原始 struct foo 的 .num 而不是指针版本(即使它们是相同的东西)。
我希望到目前为止我还没有搞砸。
4) 好的,a.ptr = &a 将原始 foo 结构中的 struct var "struct foo *ptr"设置为等于 a 的地址;这恰好是指针“struct foo *ptr”所在的结构。对吗?
5) 我们将他称为(main/orig 结构)的成员,他已经被建立为 main 之上的指针。
6) 那么这是否会在结构内形成一个无限循环,这些结构通过自身内部的指针链接在一起?
我评论编译器错误的地方就是我确信我遇到问题的地方。
7) 首先,设置 a.ptr = &a; 后我们将带有初始化指针“ptr”的结构副本传递给函数 func2,是吗?
8) 在第一个 if stmt 中,我们似乎正在将 a->word 与 a->ptr->num 进行比较。我认为这意味着: IF { 属于“a”所指向的结构的成员“word”等于成员“num”,属于指针“ptr”所指向的结构并且“ptr 是再次被指针“a”指向}这似乎是正确的,但我认为不是......
9) 如果这是真的,那么下面的行表示完全相同的内容,并添加了 +1。
10) 我想最后 main 中的最后一个 printf 会打印出 num 和 word 在进入 func2 之前的内容,或者 func2 中的某些指针已更改其值。
我非常感谢您的所有反馈和建议,告诉我应该如何将这个指针 && 结构 ptr->member 和/或 Structure.member 的东西根植在我的脑海中。
另外,我不确定这是否出现在我的问题中,但我对双指针也相当不稳定。如果不是太麻烦,有人可以告诉我双指针如何将其自身集成到我的代码中吗?
谢谢
最佳答案
a 不是指针。您在很多情况下使用 ->
运算符访问非指针 struct
成员,这会导致错误。
您的代码中有很多错误。例如,您没有为 *word
分配内存。但在其中存储一个值:
a.word = "wordOne";
您应该将结构成员num
作为a.num
访问。
这是使用 pointers to structures 的教程这可能会帮助你理解它。
关于c - 'unary *' 的类型参数无效(有 'int' )。基本上我在指针和结构的逻辑上遇到了麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10264046/
[over.unary]/2 The unary and binary forms of the same operator are considered to have the same name.
这里是this link它说: The static_cast keyword can be used for any normal conversion between types. Convers
公式开头的两个 - 符号是什么意思? 例如:此公式获取字符串日期并将其转换为 Excel 日期序列号: =--(MID(S2,4,3)&LEFT(S2,3)&MID(S2,7,4)) 公式运行正常,我
我正在尝试将 php 算法移植到 perl,但我在使用我不熟悉的一位运算符时遇到了困难... 所以 php 代码看起来像这样: ... $var = '348492634'; print ~$var;
很抱歉重复这个问题,但我无法理解(我认为我的问题是)指针。有人可以帮我解释一下吗?我已经浏览了大量的 stackoverflow 问题、c 教程,而且它最令人困惑,因为每个解决方案似乎都与另一个解决方
我正在尝试读取包含以下内容的文本文件 sport.txt,并尝试将用户输入与文本文件中找到的运动名称相匹配。 如果找到它会打印“找到运动”,如果没有找到它会打印“找不到运动”。 显示的第一个示例看起来
我写的 Bash 不多,所以我对如何解决这个问题有点困惑。我需要检查命令返回的值是否大于 x。当它运行时,我得到了 [: -gt: unary operator expected 我无法修复。 这是我
我正在编写一个简单的代码,输出目录中以 00 开头的子目录的数量。这是我的代码: #!/bin/bash maxout=2 function getnumber { number=`ls |
#!/bin/bash export PROCNAME=test export TABLE_ID=0 if [ ${TABLE_ID} -eq "" ]; then echo h
以下代码片段在我的工作系统中运行,同样的代码在我的 PC 中抛出错误。 std::bitset my_bit(*(uint32_t*)&(OFDM_cod[V][a/8].real())); Erro
我在玩codewar,我赢不了这个挑战。链接在这里: http://www.codewars.com/kata/54ca3e777120b56cb6000710/train/python 这是我的实现
我在第 5 行和第 11 行收到错误一元运算符。请帮助解决这个问题。 echo ”enter the number” read n q=$n a=0 while [ $q – gt 0 ] do
C++ 标准库提供了将比较器传递给 std::sort 的功能.但是,我的代码中有很多情况需要对 T 的列表进行排序。函数对象f .像这样的比较器将是一个有效的选择: bool compare(con
这个问题应该是给语言律师的。 假设 signed 和 unsigned int 都是 32 位宽。如 n3337.pdf 草案 5.3.1.8 所述, (-(0x80000000u)) = 0x100
鉴于 a 是未定义的,下面看起来不错: a + b + blah # => NameError: undefined local variable or method `a' for main:Obj
给定 Ruby 代码 line = "first_name=mickey;last_name=mouse;country=usa" record = Hash[*line.split(/=|;/)]
shell脚本报错:"[: =: unary operator expected"解决办法 在匹配字符串相等时,我用了类似这样的语句:
我已经想出了如何优先实现二元运算符,像这样(伪代码): method plus times() while(consume(plus_t)) do times() en
考虑这个管道。 let Pipeline = [ { $match: { }}, { $group: { workHours: { $sum: { $divid
我目前遇到一个问题,在你看它之前,请尝试认为我只是一个尝试使用带有函数的指针的初学者。 我解释一下自己:我需要有一个菜单( Function )可以调用任何其他函数,但我的问题是我从我的“main”调
我是一名优秀的程序员,十分优秀!