以指针作为函数参数的语法解释(C+;+;) 我不确定我是否可以问基本问题,但是我开始学习C++,不理解指针语法中的一个小东西。
以下是我的代码示例:以指针作为函数参数的语法解释(C+;+;) 我不确定我是否可以问基本问题,但是我开始学习C++,不理解指针语法中的一个小东西。,c++,syntax,C++,Syntax,以下是我的代码示例: using namespace std; int randomname(int *x); int main(){ int a = 1; int *ab; ab = &a; randomname(&a); } int randomname(int *x){ *x = 9001; } 我的问题是关于*符号。为什么在ab=&a;行的主函数中;我不需要*,但在线*x=9001;我需要它吗?我认为这两个函
using namespace std;
int randomname(int *x);
int main(){
int a = 1;
int *ab;
ab = &a;
randomname(&a);
}
int randomname(int *x){
*x = 9001;
}
我的问题是关于*符号。为什么在ab=&a;行的主函数中;我不需要*,但在线*x=9001;我需要它吗?我认为这两个函数的语法应该相同,但事实并非如此。有人能解释一下原因吗?星号
*
和符号&
的含义都会随着上下文的不同而变化。它们在表达和声明中的含义不同:
- 在声明中使用
时,它指定一个指针*
- 在声明中使用
时,它指定一个引用&
- 当在表达式中使用
时,它会对其操作数执行指针解引用*
- 在表达式中使用
时,它将获得其操作数的指针&
int*ab
是一个声明。星号将ab
指定为指针ab=&a代码>有一个表达式&
获取一个
的指针,并将其分配给ab
,该ab在声明时指定了指针类型(如上所述)
*x=9001
也是一个表达式,使星号成为解引用运算符。使用星号告诉编译器赋值的目标是x
指向的对象,而不是x
本身声明指针或取消引用指针时需要星号。这两个函数的语法实际上是相同的,但在每个赋值语句中赋值的内容是不同的
int
是一个值。int
变量存储在存储位置。指向int
的指针也是一个值,但其值指的是存储位置。使用指针执行赋值时,可以为指针本身赋值(指针引用的存储位置的地址),也可以为指针引用的存储位置赋值
如果函数的形式参数中出现int*x
,或者在定义ab
变量的声明int*ab
中,您需要星号,因为您将变量或参数声明为“指向int的指针”类型
在赋值ab=&a
中,您不需要星号,因为您将变量a
的地址赋值给指针ab
——您赋值的是指针本身的值,而不是指针指向的值
在赋值*x=9001
中,需要星号来获取指针所指的存储位置。这称为“取消引用”指针。您没有给指针本身赋值,而是给指针引用的存储位置赋值,该存储位置是为functionmain
中的变量a
分配的存储
Eric Lippert的这篇文章可能对您有很大帮助:
只要符合指导原则,基本问题就可以了,比如表明你已经付出了努力,并在适用的情况下提供了一个解决方案。在这种情况下,每本C++语言书都要教语言的基础知识,深入了解你为什么需要星号。不管你的问题有多困难,你都必须自己研究。你可以在这里很容易地找到这个答案,或者通过谷歌快速搜索。你要问的每一个问题都应该包含在介绍性的问题中。这是一个简单的问题,任何教科书/谷歌搜索都可以轻松回答。我认为这是一个从语言开始的人提出的公平问题,因为这两个符号的含义都会随上下文而变化。谢谢,我想我现在明白了。不知何故,我只能在1分钟后接受你的回答:/