我以为我对他们有了基本的了解,但显然我什么都没有。
#include <stdio.h>
void f(int *x, char *name)
{
*x = 4;
*name = "stan";
}
int main()
{
int y = 10;
char name = "bob";
f(&y, &name);
printf("%d and %s\n", y, name);
}
最初它只是一个使用整数的测试,但后来我在f函数中添加了第二个参数来测试字符,现在我无法获得编译代码。我想明白,但我似乎无法理解。
答案 0 :(得分:1)
你必须定义一个char
数组来实际存储一个字符串,该字符串基本上是一个有序的字符集合,所以C字符串在一段时间后变得非常直观。
对于“bob”你需要char name[4];
因为“bob”将存储4个字符(读取有关NULL终止的信息)。但是对于“stan”你需要5个字符,所以你必须事先知道你将在字符串中存储什么。
要将数组传递给一个带有指针的函数,只需调用f(&y, name)
,因为当传递给函数时,数组被降级为指向它的第一个元素(在C和C ++中,在许多情况下,数组可以被视为指针)。这对于正确的,以NULL结尾的字符串就足够了,通常你也可以添加一个int作为参数来告诉函数数组的大小是多少。
如果您想在f
中将字符串文字(如“stan”)分配给char(指向char的指针)数组,请不要取消引用指针,请写name="stan";
,因为char*
类似于char[]
。
有时候数组和指针的混合会让你头晕目眩,但当你掌握它时,你会发现它很简单,就像C字符串一样。
答案 1 :(得分:0)
这是可行的代码。
#include <stdio.h>
void f(int *x, char **name)
{
*x = 4;
*name = "stan";
}
int main()
{
int y = 10;
char *name = "bob";
f(&y, &name);
printf("%d and %s\n", y, name);
}