为什么函数可以接收一个字符数组作为字符指针,为什么函数可以改变元素的值?

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

我将 char 指针声明为函数的参数,并将 char 数组作为参数。

有人告诉我,char 指针和 char 数组是不同的类型。

但是函数可以有一个 char 数组作为 char 指针。

另外,char指针的一个元素是可以改变的,虽然参数是char指针。

这是展示案例的代码。

#include<stdio.h>
void changeelement(char *p) {
  p[0]='v';
}
int main() {
    char array[]="boice";
    changeelement(array);
  printf("%s", array);
    return 0;
}

这就是结果。 enter image description here

char指针和char数组的区别有很多答案,但是没有这种情况的答案

感谢您抽出时间。

arrays c pointers pass-by-reference implicit-conversion
1个回答
0
投票

编译器将具有数组类型的参数调整为指向数组元素类型的指针。

所以这些函数声明

void changeelement(char p[100] );
void changeelement(char p[10] );
void changeelement(char p[] );

void changeelement(char *p );

是等价的并声明相同的函数。

所以你可以在同一个程序中编写例子

void changeelement( char *p ); 

void changeelement( char p[] ) 
{
    p[0] = 'v';
}

另一方面,用作参数表达式的数组被隐式转换为指向其第一个元素的指针。

在 C 中,通过引用传递对象意味着通过指向它的指针间接传递对象。因此取消引用指针函数可以直接访问指针指向的对象并可以更改它。

例如

#include <stdio.h>

void f( int *p )
{
    *p = 10;
}

int main( void )
{
    int x = 0;

    f( &x );

    printf( "x = %d\n", x );
}

程序输出为

x = 10

类似地,当函数处理指向数组第一个元素的指针,然后取消引用指针并使用指针算法时,函数可以更改数组的任何元素。

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