这两种形式的指针参数语法真的一样吗?

问题描述 投票:0回答:2

我知道在 C 语言中,当涉及到指针参数时,我们有两种不同类型的语法。我只是想知道它们是否真的一样。考虑这个小程序,其中我有两个函数 fx1 和 fx2,它们采用不同语法的指针参数:

void fx1( int* p ){

    *p = 10;

}

void fx2( int p[] ){

    *p = 10;

}

int main(){

    int a = 20;
    
    fx1(&a);
    fx2(&a);

arrays c pointers
2个回答
2
投票

是的,他们的做法完全相同,这只是一个偏好问题。尽管您可能想考虑以下情况。

在大多数情况下,当您定义数组时,您会显式定义它的大小:

int array[SOME_SIZE];

当你使用指针语法时,你不使用

int* array;

一个重要的注意事项是,当使用函数指针时,这些语法确实有所不同,但这超出了您的问题的范围。如果有兴趣,我建议你看看这个堆栈溢出线程


0
投票
#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

两种方法效果相同,形参的地址指向传入参数的地址

© www.soinside.com 2019 - 2024. All rights reserved.