printf()打印整个数组

时间:2013-06-06 12:30:30

标签: c arrays char printf

我们假设我的 C程序

中有以下代码
#include <stdio.h>

void PrintSomeMessage( char *p );

int main(int argc, char *argv[]) {
    char arr[10] = "hello";
    PrintSomeMessage(&arr[0]);
    return 0;   
}

void PrintSomeMessage(char *p)
{
    printf("p: %s",p);
}

为什么输出的结果是“你好”而不是单个字符“h”?

我理解,如果我在格式化程序中放置"%c",它将只打印一个字母。但是,此地址中每个字母的内存地址不同。请有人向我解释一下吗?

2 个答案:

答案 0 :(得分:26)

  

但是,此地址中每个字母的内存地址都不同。

内存地址不同,但作为字符数组,它们是连续的。当您传递第一个元素的地址并使用%s时,printf将打印从给定地址开始的所有字符,直到找到'\0'

答案 1 :(得分:5)

包含arrays,基地址(即数组的地址)是地址 数组中的第一个元素。数组名称也充当指针。

考虑一排房屋(每个房屋都是阵列中的一个元素)。要识别行, 你只需要第一个房子地址。你知道每个房子后面是下一个(顺序)。获得第一个房子的地址,也会给你行的地址。

包含字符串文字(在声明中定义的字符数组),它们是自动的 附加\0

printf使用格式说明符和提供的地址进行打印。自此,您使用%s 它从第一个地址打印(使用算术递增指针)直到'\ 0'