对于C或C++中的许多新的,甚至是老的大学生来说,为什么指针会成为混乱的主要因素?是否有任何工具或思维过程可以帮助您理解指针在变量,函数和更高级别的工作方式?
有什么好的做法可以让人达到"啊哈,我明白了"的水平,而不会让他们陷入整体概念的困境?基本上,钻取方案.
还在学习更多C并且有点困惑.在我的引用中,我发现有关分配尚未初始化的指针的注意事项.他们继续举例说明.昨天从帮助我指点的人那里得到了很好的答案,这里:
在跟进时,我简要地询问了循环的最后一次迭代,并可能将指针指向一个不存在的位置(即因为我的引用警告它).所以我回去看了一下,发现了这个:
如果你有一个指针
int *pt;
Run Code Online (Sandbox Code Playgroud)
然后在不初始化的情况下使用它(即我认为这意味着没有声明*pt= &myVariable):
*pt = 606;
Run Code Online (Sandbox Code Playgroud)
你可能最终得到一个真正的糟糕的一天,取决于这个指针被分配给内存的位置.我遇到麻烦的部分是使用一串字符时这样的东西就可以了:
char *str = "Sometimes I feel like I'm going crazy.";
Run Code Online (Sandbox Code Playgroud)
引用所在的位置,"不要担心字符串在内存中的位置分配;它由编译器自动处理".所以没必要说初始化*str = &str[0];或*str = str;.意思是,编译器是自动char str[n];在后台吗?
为什么处理方式不同?或者,我完全误解了吗?
我有一个指针和一个变量:
int *a;
int b;
Run Code Online (Sandbox Code Playgroud)
作业之间是否有任何区别
a = &b;
Run Code Online (Sandbox Code Playgroud)
和
*a = &b;
Run Code Online (Sandbox Code Playgroud)
他们叫什么(像指针声明或什么)?
我正在学习指针并且已经被告知:"指针的目的是允许你手动,直接访问一块内存."
说我有int var = 5;.我不能使用变量'var'来访问存储值5的内存块,因为我可以随时更改变量的值var = 6;吗?当我只使用其变量访问任何变量的值而不是使用指向存储值的地址的指针时,我真的需要一个指针吗?
我目前正在学习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表示该地址中的值?
为什么我们在初始化指针时使该指针中的值等于第一种情况下变量的地址?
*声明一个指针。我写的时候通常会想到“ int point a ” int *a。
但接下来就变得令人困惑了:
int b = *a;代表“ int b是a的值”,而不是“ a的指针”。有了int *a = &b混乱就完美了,因为新符号&现在再次代表“ b 的指针”。
有谁知道这个约定背后的秘密逻辑吗?为什么不简单*地代表“指针”和&“值”?或者可以将这两个符号视为其他词,以便更有意义吗?
编辑:这个问题与以下四个可能重复的问题有何不同,突出了相关问题和我的问题之间的区别
我的问题是关于
*和&*符号&链接的则不然。除此之外,这些问题的答案都没有提到 1978 年 K&R 的第 90 页,其中指出指针的声明旨在作为助记符。这正是我一直在寻找的。