-2

根据定义,在 C 中,字符串是字符数组

int main() {
 char *name="David Bolton"; 
 printf("My name is %s\r\n",name) ;

 return 0;
 }

该行将char * name="David Bolton";name 定义为指向字符串中第一个字符的指针,即'D'。所以,指针名称应该包含地址,但它打印 'David Bolton' 为什么?原因是什么?既然它只包含 D 的地址,为什么它是打印整个字符串吗?

4

5 回答 5

5

因为你使用%s,C 会知道你要打印一个字符串,所以,它会一个字符一个字符地打印到屏幕上,直到遇到 symbol \0

于 2013-04-19T12:37:16.837 回答
3

%s格式说明符指示将printf指向的数据视为以空(零)字节终止的字符数组。%p如果您想打印指针地址,请使用。

于 2013-04-19T12:37:00.183 回答
2

C语言中的String是用来判断一个0结尾的。

“大卫·博尔顿”

memory image : David Bolton\0 所以可以通过地址指向显示一个指向地址区域中 0 位置的指南。

例如)

void print_string(char *string){
    while('\0'!=*string){
        putchar(*string++);
    }
}
于 2013-04-19T12:52:46.503 回答
2

printf格式字符串中,说明%s符假定相应的参数是指向字符数据的指针。这正是name

于 2013-04-19T12:36:59.743 回答
1

printf从给它的地址打印。因为%s用于打印字符串,所以它从 获取起始地址name并打印到\0. 如果你这样做printf("%p",name),它会给你存储在nameie 中的地址D

请参阅this以了解指针和this用于数组

于 2013-04-19T12:44:42.323 回答