【问题标题】:Is there an error in this code? If so, where [closed]这段代码有错误吗?如果是这样,在哪里[关闭]
【发布时间】:2019-10-18 08:14:55
【问题描述】:

我的作业待定,因为我无法理解这段代码。这段代码有错误吗?如果有,请告诉我在哪里。

#include <stdio.h>
void main()
{
    int arr[5] = {10, 20, 30, 40, 50};
    int *ptr1 = arr;
    int *ptr2 = &ptr1;
    printf('%d", **ptr2);
}

【问题讨论】:

  • 当你尝试编译它时会发生什么?
  • 这个问题似乎根本没有包括任何解决问题的尝试。请编辑问题以显示您尝试过的内容,并显示您遇到的特定障碍。欲了解更多信息,请参阅How to Ask
  • 编译器抱怨int *ptr2 = &amp;ptr1; 行,不是吗?它也抱怨printf("%d", **ptr2)。我抱怨void main() 行——它在微软系统上只是模糊有效。你应该使用int main(void)。您还应该使用换行符结束您的 printf() 格式:printf("%d\n", **ptr2);
  • @JonathanLeffler 哦,是的!我有同样的错误。那么,正确的代码是什么?
  • Vlad from Moscow said 对我来说是正确的 - 并选择了我没有找到的不匹配的引号(但不建议在格式字符串的末尾使用换行符)。跨度>

标签: c initialization declaration implicit-conversion


【解决方案1】:

根据C Standard,不带参数的函数main应该声明为

int main( void )

在此声明中

int *ptr2 = &ptr1;

声明的变量和初始化器有不同的类型,并且没有从一个到另一个的隐式转换。

你必须写

int **ptr2 = &ptr1;

而且 printf 调用的参数有错别字

printf('%d", **ptr2);
       ^^

必须

printf("%d", **ptr2);

【讨论】:

    猜你喜欢
    • 2012-04-17
    • 1970-01-01
    • 2018-12-06
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    相关资源
    最近更新 更多