打印时,指向常量的指针与指向非常量的指针的行为不同
Pointer to constant behaves differently than pointer to non-constant when printing
我有以下代码:
int main(int argc, char **argv)
{
printf("%sn",*argv);
int test = 5;
char* p;
*pint = test;
p = "banana";
printf("%sn",p);
printf("%dn",*pint);
}
为什么我必须写p="banana"
而不是*p="banana"
,但是对于一个整数,它需要是*pint
,否则它只会打印整数的地址?p
不打印"banana"的地址吗?
-
你正在比较数组和整数变量的行为!
-
p = "banana";
你正在将字符串"banana"的基址赋值给指针p。
printf函数原型为
int printf( const char *restrict format, ... );
printf("%sn",p);
上面的语句意味着你将指针p作为参数传递给函数printf,该函数保存字符串"banana"的地址
您正在使用%s
打印。这将打印一个C字符串,以输入作为该字符串的第一个字节的地址。
如果你用%p
打印它,你将得到地址。
printf("%pn",p);
c风格字符串是以' '
结尾的字符数组。当你给它赋值一个字符串时,它看起来是这样的;
char p[] = {'b', 'a', 'n', 'a', 'n', 'a', ' '};
因此,当您使用格式说明符%s
打印p
时,它将继续打印剩余的字符,直到到达null终止字符。
这样做printf("%c", *p)
将只打印第一个字符。
使用整数,如果这样做;
int p[] = {1,2,3,4,5};
并打印出来;
print("%d", *p);
你只得到数组中的第一个整数。
注意;每个格式说明符都有自己接受的值类型。这就是为什么它们被称为格式说明符
PS:我已经根据user2079303和talk的评论编辑了我的答案!
相关文章:
- 将常量指针引用绑定到非常量指针
- 如何使用数据对象上的常量指针初始化类
- 为什么我收到"从常量指针到指针的转换无效?
- C++/QT:使用指向私有成员的常量指针作为只读数据共享
- 是否可以使用非常量指针调用非常量函数,以及当两个unique_ptrs指向同一个对象时程序的行为方式?
- 为什么C++中没有常量引用,就像常量指针一样?
- 对于非常量指针类型的参数,未调用具有常量指针模板类型参数的功能
- 将常量指针强制转换为非常量
- 带有常量指针的矢量构造函数示例
- 什么是常量指针常量引用类型的参数?(const X* const & p)
- 在多线程函数中返回共享的常量指针会导致计时问题吗?
- 常量指针上的混乱
- 使用 static_cast 时指向常量指针的原因
- 如何在C++中定义常量指针数组?
- 测试此指针的常量指针性质
- 当常量指针用作函数的参数时
- C++ - 无法将顶部常量指针分配给另一个非常量指针
- 在不同类型之间转换常量指针
- 解构常量指针?
- 为什么 std::vector<>::const_reference 可以转换为非常量指针?