试图更好地理解指针

时间:2015-04-02 21:57:46

标签: c pointers

我以为我对他们有了基本的了解,但显然我什么都没有。

#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函数中添加了第二个参数来测试字符,现在我无法获得编译代码。我想明白,但我似乎无法理解。

2 个答案:

答案 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);
}