寻找有关解决字符串数组的特定主题的一些说明。似乎有几个相关的问题,但我找不到一个讨论我的问题的问题。如果之前有人询问过,请指向相关主题。
在下面的代码片段中(检查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++;
}
显然这不起作用:)但我仍然不太清楚编译器如何解释这一点。
感谢。
答案 0 :(得分:1)
您可以通过取消引用指针一次获得第一次尝试来获取字符串本身的地址。
printf("%s stored ar %p\n", *board, *board);
当您使用数组语法编写时,它实际上与
相同 printf("%s stored ar %p\n", *(board+i), *(board+i));
编辑:我似乎错过了阅读问题..修复。
答案 1 :(得分: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
来明确。