按引用传递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;
}
这可能更接近您想要做的事情,不是吗
除了编译问题(已在和中解释),值得注意的是数组本身已经是指针
只需在mainchar数组中声明\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(数组