#include<stdio.h>
int main()
{
char *p = NULL;
char str[] = "How do you do!!!!!";
p = &str;
printf("String is:%s",p);
p = "HELLO HOW ARE YOU";
printf("String is:%s",p);
printf("Hello");
int a = 10;
int *pa;
pa = &a;
printf("Contents of a is %d\n",a);
printf("Contents of pa is %x\n", (int)pa);
printf("Values of variable pointed to by pa is %d\n", *pa);
return 0;
}
在参考上面的代码时:
p = &str;
printf("String is:%s",p);
p将显示存储的字符串。
pa = &a;
printf("Values of variable pointed to by pa is %d\n", *pa);
但是,如果我想显示a=10
的值,我必须写*pa
。
为什么这样?这两者之间的区别是什么?
为什么使用p
时显示正确,而其他人在使用时显示正确*pa
在一种情况下使用derefernce运算符,而在其他情况下则不需要
答案 0 :(得分:5)
阅读printf()
和格式说明符的基础知识。
%s
期待&#34;指针&#34; type(确切地说,&#34;指向初始的指针
字符类型&#34; )参数数组的元素,因此,我们传递指针。%d
期望int
作为参数,因此,我们需要传递变量值,即取消引用指针。答案 1 :(得分:-2)
首先,编译器应至少为语句
发出诊断消息p = &str;
因为类型char *
(p的类型)和char ( * )[19]
之间没有隐式转换,它是表达式的类型&str
所以你必须简单地写
p = str;
printf打印相同字符串的原因是因为表达式&str
和str
的值相同。
要打印字符串,您必须指定格式说明符%s
,相应的参数应为指向char的指针。
printf("String is:%s",p);
当你想打印像int类型的对象那样的标量值时,你必须将它自己指定为printf的参数 在本声明中
printf("Values of variable pointed to by pa is %d\n", *pa);
表达式*pa
确实是int类型的对象。