![](/img/trans.png)
[英]Create a non-constant pointer to member function for SDL event filtering
[英]Pointer to constant behaves differently than pointer to non-constant when printing
我有以下代码:
int main(int argc, char **argv)
{
printf("%s\n",*argv);
int test = 5;
char* p;
*pint = test;
p = "banana";
printf("%s\n",p);
printf("%d\n",*pint);
}
为什么我必须写p="banana"
而不是*p="banana"
但是对于整数,它必须是*pint
,否则它将仅输出整数的地址? p
不应该打印“香蕉”的地址吗?
您正在比较数组和整数变量的行为!
p = "banana";
您正在将字符串“ banana”的基地址分配给指针p。
而printf函数原型是
int printf( const char *restrict format, ... );
printf("%s\n",p);
上面的语句暗示您将指针p作为参数传递给函数printf,该函数包含字符串“ banana”的地址
您正在使用%s
进行打印。 这将打印一个C字符串,并将输入作为字符串的第一个字节的地址。
如果使用%p
打印,您将获得地址。
printf("%p\n",p);
C风格的字符串是由'\\0'
终止的字符数组。 因此,当您给它分配一个字符串时,它就是这样。
char p[] = {'b', 'a', 'n', 'a', 'n', 'a', '\\0'};
因此,当您说时,使用格式说明符%s
打印出p
,它将继续打印其余字符,直到到达空终止符为止。
执行此printf("%c", *p)
将仅打印第一个字符。
如果执行此操作,请使用整数;
int p[] = {1,2,3,4,5};
并打印出来;
print("%d", *p);
您只会得到数组中的第一个整数。
注意; 每个格式说明符都有其接受的值。 这就是为什么它们被称为格式说明符
PS:
我已经根据user2079303和alk的评论编辑了答案!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.