2013-03-05 94 views
0

考虑这一段代码:指针在功能参数C++

char strName[25]; 
void SetInfo(char *strName) 
{ 
strncpy(m_strName, strName, 25); 
} 

他们为什么使用指针中的函数参数?我们不能这样做:

void SetInfo(char strName[]) { 
strncpy(m_strName, strName, 25); } 

?两者有什么区别?

谢谢

+2

它们是相同的。 – chris 2013-03-05 01:17:36

回答

1

在这种特殊情况下,根本就没有(除了多了一个字母输入)。传递给函数时,char数组“衰减”为指针。

-1

当作为参数传递时,数组总是衰减为指针。

在这种情况下数组类似于一个指针(它们指向的数组的第一个元件的存储器)

void foo(char a[]) 
{ 
    a[0] = '@'; 
    cout << a[0]; 
    cout << *a; 
} 

两种呼叫来清点打印相同的字符“@”。

void foo(char a[]) 
{ 
    // gives you the size of a pointer to the array's data type. 
    // prints 4 
    sizeof(a); 

    // prints char * 
    cout << typeid(a).name(); 
} 

我不确定这是否为标准。

+0

数组不是指针。它们在通过非参考函数传递给函数时衰减,等等。区别是重要的。 – chris 2013-03-05 01:31:01

+0

@chris:你能解释这种情况吗?谢谢。 (我通常说过) – agarwaen 2013-03-05 01:36:43

+1

好吧,例如,如果数组传递给'sizeof',衰减不会发生。我之所以说什么是因为很多人有错误的观念认为数组是一个指针,而这完全是错误的,只是当他们期望从一个指针发出的行为不会发生在数组中时,它们就会混淆它们。 – chris 2013-03-05 01:42:56