【发布时间】:2015-11-13 19:08:02
【问题描述】:
我需要帮助才能掌握一些东西。目前我正在使用少量内存(ROM(FLASH),RAM)的微控制器平台上测试代码。 这是代码
void print(const char * c)
{
printf("%#4x, ",c);
printf("%s\n",c);
}
这是函数调用
print("Riko");
输出为:0x5C4C, Riko
内存地址 0x5C4C 驻留在 FLASH(主代码内存)中,所以文字字符串 "Riko" 也必须驻留在该内存段中?我的问题是:当我们将"Riko" 作为参数传递给函数print 时,这实际上是否意味着我们将字符串"Riko" 或((const char*) 0x5C4C) 的第一个字符的地址作为参数传递给函数print ?非常感谢...
【问题讨论】:
-
您应该使用
%p打印指针(并将参数转换为void *)。 -
@Kninnug 请阅读6.2.5p28(以及它后面的脚注)
-
@Freenode-newbostonSebivor 不适用于可变参数函数,例如
printf。请阅读this answer。 -
@Kninnug 实际上,我引用的段落(以及它后面的脚注)确实适用于这种特定情况,尽管您的引用不适用(并且不是专制的,如果我可能会补充)......脚注说,如果你不介意阅读它,“相同的表示和对齐要求意味着暗示可互换性作为函数的参数,函数的返回值和联合成员。”不幸的是,您引用的答案没有考虑到这一点......
标签: c