2

寻找与解决字符串数组相关的特定主题的一些说明。似乎有几个相关的问题,但我找不到一个讨论我的问题的问题。如果之前有人问过这个问题,请指出我相关的线程。

在下面的代码片段中(检查 printf 语句),我使用相同的变量来访问内存位置的值和内存位置的地址。我不太确定这是否是我应该编写这段代码的方式。有没有更好的方法可以清楚地表明我是在访问地址还是值?

char *board[NUM_MAX_ROWS] = {"0101001",
                             "1101011"};

int main()
{
    int i, num_rows=0, num_cols=0;

    num_cols = strlen(board[0]);
    num_rows = ARR_SIZE(board);

    for (i=0; i<num_rows; i++)
        printf("%s stored at %p\n", board[i], board[i]);

} 

我的第一次尝试看起来像这样

while(*board != '\0')
{
    printf("%s stored ar %p\n", *board, board);
    board++;
}

显然这不起作用:)但我仍然不太确定编译器如何解释它。

谢谢。

4

2 回答 2

1

您可以通过取消引用指针一次以获取字符串本身的地址来首次尝试工作。

printf("%s stored ar %p\n", *board, *board);

顺便说一句,当您使用数组语法编写时,它实际上与

printf("%s stored ar %p\n", *(board+i), *(board+i));

编辑:我似乎错过了阅读问题..修复。

于 2012-11-07T02:24:08.697 回答
0

你可以这样做:

#include <stdio.h>

char *board[] = {"0101001",
                 "1101011",
                 0}; /* note this final 0 as a terminator for stopping the loop */

int main()
{
    int i, num_rows=0, num_cols=0;
    char **c;

    c = &board[0];
    while(*c)
    {
        printf("%s stored ar %p\n", *c, *c);
        c++;
    }

    return 0;
} 

但是,如果你这样做,你必须有一个循环停止器。此外,有些人主张使用NULL而不是0为了清楚起见。

于 2012-11-07T02:49:04.667 回答