C:使用指针时如何分配内存?

Jor*_*eFG 1 c string pointers string-literals playing-cards

我只是从Deitel看这个例子:

#include <stdio.h>

struct card {
    char *face;
    char *suit;
};

int main( void )
{
    struct card aCard;
    struct card *cardPtr;
    aCard.face = "Aces";
    aCard.suit = "Spades";
    cardPtr = &aCard;

    printf( "%s%s%s\n%s%s%s\n%s%s%s\n", aCard.face, " of ", aCard.suit,
        cardPtr->face, " of ", cardPtr->suit,
        ( *cardPtr ).face, " of ", ( *cardPtr ).suit
    );

    system("pause");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我看到有一个指向char的指针,但从未想过你可以使用char *... 来保存字符串

问题是:这里如何处理内存,因为我没有看到任何类似的东西char word[50].

cni*_*tar 5

编译器保留一些足够大的内存位置来存储文字,并将其地址分配给指针.此后你可以像平常一样使用它char *.需要注意的是,您无法修改它指向的内存.

char *str = "This is the end";
printf("%s\n", str);

str[5] = 0; /* Illegal. */
Run Code Online (Sandbox Code Playgroud)

顺便提一下,这个C FAQ也讨论了这个问题.