C++ printf';s#%ld\是什么意思?
我想知道变量声明的每个元素代表什么,是否有一种更简单的方法(更可读/更类似)来实现printf #= %= 长整型 !=不是吗 \n=新线 此外,在我们的幻灯片上,指针似乎以两种不同的方式书写 有:C++ printf';s#%ld\是什么意思?,c++,c,variables,syntax,C++,C,Variables,Syntax,我想知道变量声明的每个元素代表什么,是否有一种更简单的方法(更可读/更类似)来实现printf #= %= 长整型 !=不是吗 \n=新线 此外,在我们的幻灯片上,指针似乎以两种不同的方式书写 有: void* PrintHello(void *threadid) { long tid; tid =(long)threadid; printf("Hello World! It's me, thread #%ld!\n",tid); pthrea
void* PrintHello(void *threadid)
{
long tid;
tid =(long)threadid;
printf("Hello World! It's me, thread #%ld!\n",tid);
pthread_exit(NULL);
}
还有:
void* function_name(void* args)
星号位置的意义是什么?在本例中,哪一个看起来是正确的?请阅读编译器文档中的
printf()
。或在线文档,如,或。文档将准确地向您解释各种参数和占位符
在您的示例中,#
和代码>没有任何意义。它们不属于任何格式说明符,因此它们只是文字字符数据,就像大多数格式字符串内容一样。只有前面有%
的说明符才有特殊含义
%
字符是一个转义字符,它告诉printf()
处理以下ld
说明符printf()
将用格式化字符串中tid
变量的值替换%ld
。当打印带有变量的内容时,您需要%
声明这是var
输入的位置只是一个普通的角色ld
仅表示您输入的var类型。在这种情况下,long
<代码>代码>也没有任何意义,它只是一个常规字符。此外,当打印var
时,唯一重要的事情(在本例中)是%
和变量类型之间的事情,在本例中,变量类型是ld
\n
仅表示您前面所述的新行
星号的位置不会改变任何东西。他们都是对的。使用星号的原因只是告诉您它是一个指针这不是C语言的特定关键字。
让我来解释一下
void* function_name(void *args)
等于
#%ld!\n
正如其他人已经说过的,%ld
格式字符串“你好,世界!是我,线程#%ld!\n”
定义了long
类型变量的放置位置<代码>.
和
是普通字符,\n
代表新行(特殊字符反斜杠赋予后续字符特殊含义)
但是,当您分配
long tid=(long)threadid
而threadid
为void*
类型时,代码中还有另一个问题,即指向某个非特定类型的指针。实际上,如果您知道threadid
将指向long,那么应该编写long tid=*((long*)threadid)
,以便取消对指针的引用并将其解释为特定类型long
;否则,您将分配指针值(即一些内存地址)。 < P>也许您也会感兴趣地看到类似的C++语句?
也可以,对于C++中的一些人,C++版本将解释PrtTf格式信息的用法。
- 默认情况下,printf将输出定向到stdout。C++使用STD::CUT/< P>
- “#”和“!”只是字符(两种形式)
# : Hash character to show count/numbers
%ld : Specifier referencing a long integer that you want to show.
! : Simple exclamatory character.
\n : New line
std::cout除了您列出的那个,它们只是字符。@Dai:不是真的。%
存在(%ld
)。%ld
指的是tid
变量、#
和
只是普通字符。空格被忽略void*args
,void*args
,void*args
和void*args
都是相同的意思。您的PrintHello
函数调用未定义的行为,因为您未能返回void*
。
std::cout << '#' << tid << "!\n";
std::cout << '#' << tid << '!' << std::endl;