相关疑难解决方法(0)

即使不执行返回,非void函数也能正常工作

我是一名计算机科学专业的大学生.昨天,我有一个关于使用C++的二进制搜索树的课程.我们由该班的实验室助理教授.

他们将树中的节点定义为这样的结构:

struct Data{
    char name[15];
    int age;
    Data *left,*right;
};
Run Code Online (Sandbox Code Playgroud)

他们给了我们一个在BST内搜索的代码,如下所示:

// temp is current node, name is the value of the node to be searched for.
Data* search(Data *temp,char name[]) {
    if(strcmp(temp->name,name)>0)
        search(temp->left,name);
    else if(strcmp(temp->name,name)<0)
        search(temp->right,name);
    else
        return temp;
}
Run Code Online (Sandbox Code Playgroud)

我注意到代码是错误的.如果函数进入第一个或第二个if块,它将不执行任何return语句.

但是当实验室助理运行代码时,它运行得很好.

我想也许这种行为是特定于编译器的.但是当我在gcc上尝试该代码时,该函数也可以正常工作.(我们大学使用microsoft visual c ++编译器)

任何人都可以解释发生了什么?为什么这段代码有效?

PS:忽略其他错误,例如当节点为空时,找不到值等.

c++ function binary-search-tree

2
推荐指数
1
解决办法
156
查看次数

这个C代码是否会产生"未定义的行为"?

我正在阅读一篇有趣的文章"C和C++中未定义行为指南",第1部分,关于C和C++中未定义的行为.我经常在代码中执行以下操作:

int i = 10;
i = (++i) % 7;
Run Code Online (Sandbox Code Playgroud)

这会产生不确定的行为吗?在x86上?臂?也许这取决于编译器?

c undefined-behavior

1
推荐指数
1
解决办法
152
查看次数

在C/C++上,基本上什么是编译器依赖的东西?

什么任务,功能,执行因编译器而异?我知道这段代码依赖于编译器 -

#include <stdio.h>
#define PRODUCT(x)(x*x)
int main()
{
int i=3,j,k;
j=PRODUCT(i++);
k=PRODUCT(++i);
printf("\n%d %d",j,k);
}
Run Code Online (Sandbox Code Playgroud)

下面给出了一些垃圾,而其他的则是固定值 -

#include <stdio.h>
int main()
{
int i=5,j=10;
printf("%d,%d");
}
Run Code Online (Sandbox Code Playgroud)

因此执行顺序因编译器而异.这些模棱两可的课程是否有资格参加考试?

c c++ compiler-construction

1
推荐指数
1
解决办法
3211
查看次数

使用指针时输出不同于预期

我无法弄清楚我得到的输出的原因: -

    int ar[5] = {1, 3, 5, 7, 9};
    int *p = ar;
    printf("%d\t%d\n", *p, *(p++));
Run Code Online (Sandbox Code Playgroud)

输出:3 1

但我希望:1 3表示p指向第1个元素,p ++指向第2个元素.

c

1
推荐指数
1
解决办法
67
查看次数

无法找到 BST 的高度

使用递归我试图找到树的高度,但输出似乎错误。任何错误?

#include <iostream>

struct node{
    int data;
    node* left, *right;
};

node* getNode(int item){
    node* new_node = new node;
    new_node->data = item;
    new_node->left = new_node->right = nullptr;
    return new_node;
}

node* insert(node* root, int item){
    if(root == nullptr){
        root = getNode(item);
    }
    else if(item < root->data){
        root->left = insert(root->left, item);
    }
    else if(item > root->data){
        root->right = insert(root->right, item);
    }
    return root;
}

int height(node* root){
    if(root == nullptr){
        return 0;
    }
    else{
        return 1+std::max(height(root->left), height(root->right));
    }
}

int main() …
Run Code Online (Sandbox Code Playgroud)

c++ segmentation-fault binary-search-tree

1
推荐指数
1
解决办法
45
查看次数

C++ 中后递增的后递增

如果我在 C++ 中使用嵌套的增量运算符,例如

int a = 1;
int b = (a++)++;
Run Code Online (Sandbox Code Playgroud)

它给出了一个编译时错误:

error: lvalue required as increment operand

但是,如果我写

int a = 1;
int b = ++(++a);
Run Code Online (Sandbox Code Playgroud)

的新值b变为 3。

这是什么原因?

c++ increment

1
推荐指数
1
解决办法
128
查看次数

应用于单词数组的随机数范围

我是C++的新手.我基本上是自学.我遇到了一个我正在练习的Hangman游戏项目.我的问题是随机字生成.

我知道例如,int n=rand()% 10意味着生成0到10范围内的随机数.

现在在游戏中有一个包含10个单词的10个单词的数组.我感到困惑的是,如果从0到10的数字是随机生成的,那么这将是从11个随机数中选择的.但是,该数组只有10个元素(0-9).

当随机发生器选择10时会发生什么?元素10不存在于数组中,对吗?
那么这段代码应该int n=rand()% 9不是吗?

此外,在游戏中选择所有单词之前,是否可以重复相同的单词?那显然不是理想的.如果可以的话,我该如何防止这种情况?

c++

0
推荐指数
1
解决办法
117
查看次数

有趣的节目行为

所以我有一个小程序

#include <iostream>
using namespace std;

void lol() {
    cout << "How did we get here?"<<std::endl;
}

int main()
{
   long a, b, z[10];
   cin >> a >> b;
   z[a] = b;
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处通过在线编译器运行它

该程序没有任何目的,但它有一个错误或功能 - 我不知道它是什么.所以,如果你写这样的东西, main 13 2015你可能什么也得不到,但是如果你输入两个幻数13,4196608你就会得到一个错误.此外,程序执行功能void lol()并打印线How did we get here?.

我跑了nm ./main,发现我的函数void lol()的地址0000000000400900等于4196608(数字系统的基数是10).

这意味着程序由于某种原因"跳转"到该地址并执行该功能void lol().而且,如果我改变第一个数字,什么都不会发生. main 10 4196608,main 11 4196608,main …

c++

0
推荐指数
1
解决办法
94
查看次数

指针增量如何工作

int main(void)
{
    int n1 = 2, n2 = 5;
    int *p = &n1, *q = &n2;
    *p = *(q++);
    printf("%d,%d", *p, *q);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出= 5,5

为什么值为*q5它应该有一些垃圾值?

int main(void)

{

    int n1 = 2, n2 = 5;

    int *p = &n1, *q = &n2;

    *p = *(++q);

    printf("%d,%d", *p, *q);

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

输出= 2,2

这是怎么回事?任何人都可以解释优先规则如何在指针中工作?

c pointers

0
推荐指数
1
解决办法
78
查看次数

c ++函数返回错误的数组

我正在尝试创建一个getSortedRanks返回数组的函数.我从这个问题中复制了返回数组的格式.函数返回数组但是数组没有正确返回.

#include <stdlib.h>
#include <stdio.h>
#define familyMembers 4

int *getSortedRanks()
{
    int rankedMembers[familyMembers] = {3,4,2,1};
    return rankedMembers;
}

int main()
{
    int *sortedRanks = getSortedRanks();

    //print the returned array
    for(int i = 0; i < familyMembers; i ++)
    {
        cout << "ranked member is " << sortedRanks[i] << endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,输出是:

ranked member is 3
ranked member is 0
ranked member is 0
ranked member is 2686744
Run Code Online (Sandbox Code Playgroud)

数组的第一个元素sortedRanks总是正确的,但其他元素则不正确.如何更正返回数组的方式?

c++ arrays pointers function

0
推荐指数
1
解决办法
65
查看次数