printf如何处理字符串

时间:2014-02-20 19:17:23

标签: c string pointers

查看下面的代码

char *p="bayant";  // char pointer
char str[ ] = "bayant"; // char array
printf("%s",p);//here we are passing pointer
printf("%s",str);//here we are passing strings base address

但它是如何工作的,因为我们对指针和字符串使用相同的格式?

5 个答案:

答案 0 :(得分:2)

%s转换规范需要char *参数。

在第二种情况下,您有一个char参数数组,但C规则将char数组类型的表达式转换为char *类型<。 / p>

答案 1 :(得分:1)

C中的数组隐式是指向该类型的指针。所以str本质上也是指向char的指针。

当你做c =“string”时,C在内存中创建字符串,c是指向其中第一个字符的指针。

当你执行char str [] =“string”时,C在内存中创建相同的字符串,str是指向其中第一个字符的指针。

答案 2 :(得分:1)

对于printf来说,重要的是, p str 与printf属于同一类型。

两者都只是一个指向字符数组的指针。因此,printf会查看他们指向的位置并使用字符,直到下一个\0

答案 3 :(得分:1)

在这两种情况下p&amp; str是包含字符串的地址,格式说明符%s用于打印它。

以下是您假设的典型内存布局,

     +------+ 
p--->|bayant|
     +------+

   +------+   
str|bayant|
   +------+

答案 4 :(得分:0)

第一个是指针,第二个是数组。因此任何函数都可以区分这两个重载:

void foo(char* p){}
void foo(char str[]){}

如果您打算问这个问题。否则arrayname和指针在c

中真的相同