如果你编写一个 C++ 函数,例如
void readEmStar( int *arrayOfInt )
{
}
与 C++ 函数相比,例如:
void readEmSquare( int arrayOfInt[] )
{
}
使用 [方括号] 与 *asterisk 之间有什么区别?假设它们与编译器等效,是否有人有关于哪种更好的风格指南?
为了完整起见,举一个例子
void readEmStar( int *arrayOfInt, int len )
{
for( int i = 0 ; i < len; i++ )
printf( "%d ", arrayOfInt[i] ) ;
puts("");
}
void readEmSquare( int arrayOfInt[], int len )
{
for( int i = 0 ; i < len; i++ )
printf( "%d ", arrayOfInt[i] ) ;
puts("");
}
int main()
{
int r[] = { 2, 5, 8, 0, 22, 5 } ;
readEmStar( r, 6 ) ;
readEmSquare( r, 6 ) ;
}
当你使用类型时char x[]
代替char *x
没有初始化,你可以认为它们是相同的。您不能将新类型声明为char x[]
无需初始化,但您可以接受它们作为函数的参数。在这种情况下,它们与指针相同。
当你使用类型时char x[]
代替char *x
与初始化,它们完全100%不同。
如何操作的示例char x[]
不同于char *x
:
char sz[] = "hello";
char *p = "hello";
sz
实际上是一个数组,而不是一个指针。
assert(sizeof(sz) == 6);
assert(sizeof(sz) != sizeof(char*));
assert(sizeof(p) == sizeof(char*));
如何操作的示例char x[]
是相同的char *x
:
void test1(char *p)
{
assert(sizeof(p) == sizeof(char*));
}
void test2(char p[])
{
assert(sizeof(p) == sizeof(char*));
}
传递给函数的编码风格:
你做哪一个并不重要。有些人更喜欢char x[]
因为很明显您想要传入一个数组,而不是单个元素的地址。
通常这已经很清楚了,因为您将有另一个参数来表示数组的长度。
进一步阅读:
请参阅这篇文章标题数组与指针不一样!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)