按引用传递c中的指针数组

按引用传递c中的指针数组,c,arrays,pointers,C,Arrays,Pointers,我想通过引用以错误的方式传递我的数组,因为我对它有很多警告。你能帮我吗 void func (char **array[], char b){ *array[0]=&b; } int main () { char *array_in_main[SIZE]; char b_in_main='b'; func (*array_in_main, b_in_main); return 0; } 是的,我知道。这是一个毫无意义的例子,但我怀疑的是语法。请检查一下 当用作参数时,C中的数组被

我想通过引用以错误的方式传递我的数组,因为我对它有很多警告。你能帮我吗

void func (char **array[], char b){
*array[0]=&b;
}

int main () {

char *array_in_main[SIZE];
char b_in_main='b';
func (*array_in_main, b_in_main);
return 0;

}

是的,我知道。这是一个毫无意义的例子,但我怀疑的是语法。请检查一下

当用作参数时,C中的数组被分解为指向第一个元素的指针

只需传递数组本身。不需要指向它的指针

同样,正如Osiris所说,不能在局部变量的作用域之外使用它的地址

void func (char *array[], char b){  /* Changed &b to b */
    array[0][0]=b; /* Changed array[0] to array[0][0], assuming that array is a 2D array */
}
int main () {
    char *array_in_main[SIZE];
    char b_in_main='b';
    func (array_in_main, b_in_main); /* Changed *array_in_main to array_in_main */
    return 0;
}

当用作参数时,C中的数组被分解为指向第一个元素的指针

只需传递数组本身。不需要指向它的指针

同样,正如Osiris所说,不能在局部变量的作用域之外使用它的地址

void func (char *array[], char b){  /* Changed &b to b */
    array[0][0]=b; /* Changed array[0] to array[0][0], assuming that array is a 2D array */
}
int main () {
    char *array_in_main[SIZE];
    char b_in_main='b';
    func (array_in_main, b_in_main); /* Changed *array_in_main to array_in_main */
    return 0;
}

您可以在这里查看问题

首先,将错误的类型传递给函数。如果要修改函数中的数组,不必使用指向该数组的指针传递它,因为该数组将衰减为指向其第一个元素的指针

其次,如果试图使用
b
的地址,该地址是一个局部变量,其作用域以函数
func
结尾,则不能在外部使用它

此代码将在以下情况下工作:

#include <stdio.h>
#define SIZE 10

void func (char *array[], char *b)
{
    array[0]=b;
}

int main () 
{
    char *array_in_main[SIZE];
    char b_in_main='b';
    func (array_in_main, &b_in_main);

    return 0;
}
#包括
#定义尺寸10
void func(字符*数组[],字符*b)
{
数组[0]=b;
}
int main()
{
char*array_in_main[SIZE];
字符b_in_main='b';
func(主数组中的数组和主数组中的b);
返回0;
}

您可以在此处查看问题

首先,将错误的类型传递给函数。如果要修改函数中的数组,不必使用指向该数组的指针传递它,因为该数组将衰减为指向其第一个元素的指针

其次,如果试图使用
b
的地址,该地址是一个局部变量,其作用域以函数
func
结尾,则不能在外部使用它

此代码将在以下情况下工作:

#include <stdio.h>
#define SIZE 10

void func (char *array[], char *b)
{
    array[0]=b;
}

int main () 
{
    char *array_in_main[SIZE];
    char b_in_main='b';
    func (array_in_main, &b_in_main);

    return 0;
}
#包括
#定义尺寸10
void func(字符*数组[],字符*b)
{
数组[0]=b;
}
int main()
{
char*array_in_main[SIZE];
字符b_in_main='b';
func(主数组中的数组和主数组中的b);
返回0;
}

这可能更接近您想要做的事情,不是吗

除了编译问题(已在和中解释),值得注意的是数组本身已经是指针

只需在main
char数组中声明\u main[SIZE]
。之后,您只需指定
char array[]
作为参数,并直接将
array\u传递到\u main
中。传递给函数的是数组中第一个位置的地址
&(array_in_main[0])
,因此可以从函数中有效地更新数组

守则:

#define SIZE 10

void func(char array[], char b) {
  array[0] = b;
}

int main () {
  char array_in_main[SIZE];
  char b_in_main='x';
  func(array_in_main, b_in_main);
  return 0;
}

这可能更接近你想要做的,不是吗

除了编译问题(已在和中解释),值得注意的是数组本身已经是指针

只需在main
char数组中声明\u main[SIZE]
。之后,您只需指定
char array[]
作为参数,并直接将
array\u传递到\u main
中。传递给函数的是数组中第一个位置的地址
&(array_in_main[0])
,因此可以从函数中有效地更新数组

守则:

#define SIZE 10

void func(char array[], char b) {
  array[0] = b;
}

int main () {
  char array_in_main[SIZE];
  char b_in_main='x';
  func(array_in_main, b_in_main);
  return 0;
}

您需要了解在C编程语言中如何将
数组
传递给函数的机制。当您将数组传递给C中的函数时,指向数组第一个元素的指针(地址)将传递给函数,因为您有对它的引用,所以可以在函数中修改数组的内容(但不能更改数组指向的内存位置)。我建议你看看这个

下面的程序有两个功能
rightFunc
函数是一种简单而正确的方法,可以实现您一直在尝试的功能。但是,我提供了
func
,它显示了将指针(或引用)传递到指针数组的方法

#include <stdio.h>

#define SIZE 100

void rightFunc(char *array[], char *b)
{
    array[0] = b;
}

void func(char *(*array)[], char *b)
{
    (*array)[0] = b;
}

int main(int argc, char *argv[]) 
{
    char *array_in_main[SIZE];
    char b_in_main = 'b';

    func(&array_in_main, &b_in_main);
    printf("Character is %c\r\n", *array_in_main[0]);

    b_in_main = 'c';
    rightFunc(array_in_main, &b_in_main);
    printf("Character is %c\r\n", *array_in_main[0]);
    return 0;
}
#包括
#定义大小100
void rightFunc(字符*数组[],字符*b)
{
数组[0]=b;
}
void func(字符*(*数组)[],字符*b)
{
(*数组)[0]=b;
}
int main(int argc,char*argv[])
{
char*array_in_main[SIZE];
char b_in_main='b';
func(&array_in_main,&b_in_main);
printf(“字符为%c\r\n”,*array\u in_main[0]);
b_in_main='c';
rightFunc(数组_在_main中,&b_在_main中);
printf(“字符为%c\r\n”,*array\u in_main[0]);
返回0;
}

我想指出你们程序中的一个错误。您可以获取局部变量的地址(
自动存储类
),但该地址在函数外部无效(当函数退出时)。为了纠正程序中的问题,我修改了函数,在程序中使用指向char的
指针。

您需要了解在C编程语言中如何将
数组
传递给函数的机制。当您将数组传递给C中的函数时,指向数组第一个元素的指针(地址)将传递给函数,因为您有对它的引用,所以可以在函数中修改数组的内容(但不能更改数组指向的内存位置)。我建议你看看这个

下面的程序有两个功能
rightFunc
函数是一种简单而正确的方法,可以实现您一直在尝试的功能。但是,我提供了
func
,它显示了将指针(或引用)传递到指针数组的方法

#include <stdio.h>

#define SIZE 100

void rightFunc(char *array[], char *b)
{
    array[0] = b;
}

void func(char *(*array)[], char *b)
{
    (*array)[0] = b;
}

int main(int argc, char *argv[]) 
{
    char *array_in_main[SIZE];
    char b_in_main = 'b';

    func(&array_in_main, &b_in_main);
    printf("Character is %c\r\n", *array_in_main[0]);

    b_in_main = 'c';
    rightFunc(array_in_main, &b_in_main);
    printf("Character is %c\r\n", *array_in_main[0]);
    return 0;
}
#包括
#定义大小100
void rightFunc(字符*数组[],字符*b)
{
数组[0]=b;
}
void func(字符*(*数组)[],字符*b)
{
(*数组)[0]=b;
}
int main(int argc,char*argv[])
{
char*array_in_main[SIZE];
char b_in_main='b';
func(&array_in_main,&b_in_main);
printf(“字符为%c\r\n”,*array\u in_main[0]);
b_in_main='c';
rightFunc(数组