printf()打印整个数组

Nul*_*ion 11 c arrays printf char

假设我的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);
}
Run Code Online (Sandbox Code Playgroud)

为什么输出这个单词"hello"而不是单个字符"h"?

但我明白,如果我"%c"在格式化程序中添加一个,它只会打印一个字母.但是,此地址中每个字母的内存地址不同.请有人向我解释一下吗?

Roh*_*han 26

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

Memory address is different but as its array of characters they are sequential. When you pass address of first element and use %s, printf will print all characters starting from given address until it finds '\0'.


Suv*_*yil 5

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

考虑一排房屋(每个房屋都是数组中的一个元素)。要识别该行,您只需要第一个房屋的地址即可。每个房子后面都跟着第二个(顺序的)地址。获取第一个房屋的地址也将为您提供该行的地址。

如果是字符串文字(在声明时定义的字符数组),它们会自动附加\0

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