printf是格式化输出,速度往往比cout要快,当然printf的格式更为严格一些,在利用printf输出变量时需要指明输出控制符,而不同的输出控制符对应着不同的输出格式,也仅仅是输出格式,内存中存储的数值是固定不变的。
更容易理解的讲:不同格式化输出控制符对应的是一个存储单元不同的展现形式,该单元的存储值是不变的。
int i = 10;
printf("i(%%d) = %d\n", i);
printf("i(%%p) = %p\n", i);
printf("i(%%x) = %x\n", i);
int *pi = &i;
printf("pi(%%d) = %d\n", pi);
printf("pi(%%p) = %p\n", pi);
printf("pi(%%x) = %x\n", pi);
printf("&i(%%d) = %d\n", &i);
printf("&i(%%p) = %p\n", &i);
printf("&i(%%x) = %x\n", &i);

就像%d往往用来输出int类型变量一样,%p往往用来输出指针类型变量。
换言之,输出整型数据用%d,是因为该内存单元所存放的数值是整型;输出指针类型数据用%p,是因为该内存单元所存放的数值是地址型;
注意用词:地址型而非指针型,指针型数据可以理解为地址型数据,而地址型数据并非都是指针型数据,例如 &i,这其实是一个运算式,&是单目运算符,返回变量i的地址,此时要想输出&i,也是用到&p。
通过看测试的三组样例,应该能够深刻的体会到,不同的输出控制符,只是将数据以不同的形式展现出来而已,%d是十进制,%p与%x均为十六进制,进制转换一下,会发现其数值是不变的。
关于%p和%x的区别
%p用来输出地址;%x用来输出一个数值,而这个数值是以十六进制表示。
1509

被折叠的 条评论
为什么被折叠?



