【发布时间】:2015-05-30 12:22:15
【问题描述】:
考虑到必须在 %p 中分配指针,我预计会出现编译错误,但是当我故意将指针分配给 %s 时,下面的代码不会给我错误。通过添加 & 符号,它应该生成数组的地址并将内存地址分配给 %p,而不是给出字符串的值。除非我取消引用指针,但我根本不取消引用指针,否则我从不在 printf 中的 my_pointer 前面放一个星号 *。
#include <stdio.h>
int main()
{
char words[] = "Daddy\0Mommy\0Me\0";
char *my_pointer;
my_pointer = &words[0];
printf("%s \n", my_pointer);
return 0;
}
请看这个:
printf("%s \n", my_pointer);
我的理解是,*my_pointer(带星号*)应该给我字符串的值。 但是 my_pointer (不带星号)不应该给我字符串的值,而应该只给我内存地址,但是当我运行这段代码时,我得到了字符串的值,即使我没有不要把星号 * 放在前面。我希望我这次能说清楚。
【问题讨论】:
-
您不能“分配”指向
printf格式说明符的指针;%s想要一个char*,这就是你给它的。 -
我看不出问题出在哪里。 %s 考虑 const char* 参数