我知道在 C 语言中,当涉及到指针参数时,我们有两种不同类型的语法。我只是想知道它们是否真的一样。考虑这个小程序,其中我有两个函数 fx1 和 fx2,它们采用不同语法的指针参数:
void fx1( int* p ){
*p = 10;
}
void fx2( int p[] ){
*p = 10;
}
int main(){
int a = 20;
fx1(&a);
fx2(&a);
是的,他们的做法完全相同,这只是一个偏好问题。尽管您可能想考虑以下情况。
在大多数情况下,当您定义数组时,您会显式定义它的大小:
int array[SOME_SIZE];
当你使用指针语法时,你不使用
int* array;
一个重要的注意事项是,当使用函数指针时,这些语法确实有所不同,但这超出了您的问题的范围。如果有兴趣,我建议你看看这个堆栈溢出线程
#include <stdio.h>
void fx1( int* p ) { *p = 10; }
void fx2( int p[] ) { *p = 30; }
int main( )
{
int a = 20;
fx1( &a );
printf( "fx1 a = %d\n", a );
fx2( &a );
printf( "fx2 a = %d\n", a );
}
输出
fx1 a = 10
fx2 a = 30
两种方法效果相同,形参的地址指向传入参数的地址