我目前正在学习C中的指针.我对指针的初始化感到困惑.我可能会问一些愚蠢的问题,但我只想确保理解并正确地学习.
所以,要初始化一个指针:
int a = 3;
int *pointer = &a;
*pointer = 10;
Run Code Online (Sandbox Code Playgroud)
要么
int a = 3;
int *pointer;
pointer = &a;
*pointer = 10;
Run Code Online (Sandbox Code Playgroud)
到目前为止,我知道"*"声明了一个指针类型.
*pointer 是指针指向的地址中任何值的值.
& 是某事物的记忆地址.
在第二种情况下,我可以理解'pointer =&a'.
但是,为什么我们在上面的第一种情况下设置*pointer =&a,因为*pointer表示该地址中的值?
为什么我们在初始化指针时使该指针中的值等于第一种情况下变量的地址?
class A<T>
{
class InnerA<U>
{}
}
public class Main
{
public static void main(String[] args)
{
A<Integer>.InnerA<String> var = new A<>().new InnerA<>();
}
}
Run Code Online (Sandbox Code Playgroud)
当上面的代码片段被编译,它会导致编译时错误说“不兼容的类型:不能推断类型参数A.InnerA<>。在我看来,编译器应该能够推断出类型为InnerA<String>。
为什么它不能这样做?如果有人可以解释它在幕后是如何工作的,那将会很有帮助。