为什么大多数C程序员都将变量命名为:
int *myVariable;
Run Code Online (Sandbox Code Playgroud)
而不是像这样:
int* myVariable;
Run Code Online (Sandbox Code Playgroud)
两者都有效.在我看来,星号是类型的一部分,而不是变量名称的一部分.谁能解释这个逻辑?
我已经在很多代码中看到了这个的混合版本.(顺便说一下,这适用于C和C++.)人们似乎用两种方式之一来声明指针,我不知道哪一个是正确的,如果它甚至是重要的.
第一种方法是将星号放在类型名称旁边,如下所示:
someType* somePtr;
Run Code Online (Sandbox Code Playgroud)
第二种方法是将星号放在变量名称旁边,如下所示:
someType *somePtr;
Run Code Online (Sandbox Code Playgroud)
这已经让我疯了一段时间了.是否有任何标准方法来声明指针?甚至指针是如何声明的?我之前使用过两个声明,并且我知道编译器并不关心它是哪种方式.然而,事实上,我已经看到以两种不同的方式宣告指针,这让我相信它背后有一个原因.我很好奇,如果任何一种方法在某些方面更具可读性或逻辑性,那我就错过了.
这里有很多C++问题的答案包含响应:
"你应该使用boost::(在这里插入你最喜欢的智能指针)或者更好的提升:(在这里插入你最喜欢的超级复合增强型)"
我完全不相信这对提问者有任何好处,而提问者总的来说是明显的C++新手.我的理由如下:
使用智能指针而不了解幕后发生的事情会导致一代C++程序员缺乏程序员的一些基本技能.这似乎已经发生在Java领域了.
决定使用哪种类型的智能指针在很大程度上取决于要解决的问题域.从这里发布的问题中几乎总是缺少这一点,所以简单地说"使用共享指针"可能至少是无益的,可能是完全错误的.
Boost还不是C++标准的一部分,可能无法在提问者使用的特定平台上使用.安装它有点痛苦(我只是使用Jam),如果你想要的只是一些智能指针,那就太过分了.
如果您正在编写FOSS代码,那么您不希望代码严重依赖外部库,而您的用户可能再也没有.由于库之间依赖关系的拜占庭复杂性,我在很多场合都被推迟使用FOSS代码.
总而言之,我并不是说不推荐Boost,而是在这样做时我们应该更加小心.
当我这样做(在我班上)
public:
Entity()
{
re_sprite_eyes = new sf::Sprite();
re_sprite_hair = new sf::Sprite();
re_sprite_body = new sf::Sprite();
}
private:
sf::Sprite* re_sprite_hair;
sf::Sprite* re_sprite_body;
sf::Sprite* re_sprite_eyes;
Run Code Online (Sandbox Code Playgroud)
一切正常.但是,如果我将声明更改为:
private:
sf::Sprite* re_sprite_hair, re_sprite_body, re_sprite_eyes;
Run Code Online (Sandbox Code Playgroud)
我得到这个编译器错误:
error: no match for 'operator=' in '((Entity*)this)->Entity::re_sprite_eyes = (operator new(272u), (<statement>, ((sf::Sprite*)<anonymous>)))
Run Code Online (Sandbox Code Playgroud)
然后它说候选人re_sprite_eyes是sf::Sprite对象和/或参考.
为什么这不起作用?声明不一样吗?
在C++中,我看到指针以不同的方式放置.例如,
char* ptr
char * ptr
char *ptr
Run Code Online (Sandbox Code Playgroud)
以上3个例子是否相同?(与&相同)
我是C语言的初学者,所以如果和函数原型char* ft_name(args)等效的话我有点困惑char *ft_name(args)。
有人可以帮我吗
指针的语法从来没有对我有意义.我注意到这两个选项都适用于声明指针.我应该使用哪一个?
哪一个是最好的写作方式:
string* str
Run Code Online (Sandbox Code Playgroud)
要么:
string *str
Run Code Online (Sandbox Code Playgroud)
其中一个有副作用的缺点吗?
谢谢
可能重复:
您首选的指针声明样式是什么?为什么?
在C中,为什么变量名之前的星号,而不是类型之后?
什么更有意义 - char*string或char*string?
在Objective-C中声明对象的新实例时,在放置星号的位置有什么不同吗?
这仅仅是个人偏好的问题吗?
NSString* string = @"";
Run Code Online (Sandbox Code Playgroud)
与
NSString *string = @"";
Run Code Online (Sandbox Code Playgroud) 我对指针有一个基本的想法.有什么区别int *v;和之间int **v;有什么区别int* v;和int *v;请告诉我.