我的问题是关于不同界面中的类型转换
假设我有一个界面
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编写的示例代码:
#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
以下是一些系统详细信息: