小编GPu*_*uri的帖子

在转换为错误类型时没有编译时错误

我的问题是关于不同界面中的类型转换

假设我有一个界面

public interface I
{
    void method();
}
Run Code Online (Sandbox Code Playgroud)

实现它的类

public class C : I
{
    public void method()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

我有另一个界面

public interface I1
{
    void method1();
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我做这样的事情

C c1 = new C();
((I1)c1).method1();
Run Code Online (Sandbox Code Playgroud)

它抛出运行时异常而不是编译时错误

c#

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

C 中函数参数表现异常

下面是用C编写的示例代码:

#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>

int* second;
void myTest1(int a, bool check){
    if(check){
        second = &a;
    }
    printf("%d", *(second));
    printf(" ");
}
int main(int argc, char const *argv[])
{
    int a =1;
    int b = 2;
    int c=3;
    myTest1(a,true);
    myTest1(b,false);
    myTest1(c,false);
}
Run Code Online (Sandbox Code Playgroud)

我期望输出是这样的

1 1 1

但实际输出是

1 2 3

我对此有点困惑,void myTest1(int a, bool check)这里我认为a应该有函数作用域。但似乎内存位置a在每个函数调用中都被重用。

我正在使用命令构建gcc <filename>.c

以下是一些系统详细信息:

  • 操作系统:Ubuntu
  • GCC编译器版本:gcc(Ubuntu 9.4.0-1ubuntu1~20.04.1)9.4.0

c

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

标签 统计

c ×1

c# ×1