【问题标题】:C: On passing pointer having array to a function there is run time error. Why?C:在将具有数组的指针传递给函数时,会出现运行时错误。为什么?
【发布时间】:2019-02-24 11:00:22
【问题描述】:
int add_up (int *a, int num_elements);

int main() 
{
  int orders[5] = {100, 220, 37, 16, 98};
  int *p;
  p=&orders[0];

  printf("Total orders is %d\n", add_up(*p, 5)); 

这里如果我传递指针有什么问题?因为指针将指向否。 100 的价值。因为 100 是一个 int 值,它将转到 int *a。程序应该很顺利吧? 编辑 1:如果我在这里给 p 代替 *p 那么它将是 orders[0] 的地址而不是值 100 对吗? 但是函数 int *a 想要正确的值 100。如果我在这个概念上错了,请纠正我,谢谢。

  return 0;
}

int add_up (int *a, int num_elements) 
{
  int total = 0;
  int k;

  for (k = 0; k < num_elements; k++) 
  {
    total += a[k];
  }
  return (total);
} 

【问题讨论】:

  • 认真对待编译器的警告。
  • 你用的是什么编译器?如果您没有收到任何警告,则需要尽快切换到更好的编译器。如果您确实收到了警告,您应该已经阅读并处理了这些警告。

标签: c arrays function pointers function-pointers


【解决方案1】:

将您的代码替换为以下内容:

#include <stdio.h>
#include <stdlib.h>

int add_up (int *a, int num_elements);

int main() 
{
  int orders[5] = {100, 220, 37, 16, 98};
  int *p;
  p=&orders[0];

  printf("Total orders is %d\n", add_up(p, 5)); 
  return 0;
}

int add_up (int *a, int num_elements) 
{
  int total = 0;
  int k;

  for (k = 0; k < num_elements; k++) 
  {
    total += a[k];
  }
  return (total);
}

您忘记包含 2 个标题和 add_up(*p, 5) 并删除 *

【讨论】:

  • 为什么我应该添加 p 而不是 *p 因为 int *a 是一个指针。 p 给出地址。 *p 给出数组的值。如果我在某种程度上错了,请纠正我。谢谢。
  • 您的 add_up 函数原型是`int add_up (int *a, int num_elements)`,所以第一个参数是整数类型的指针。 p 已经是指针 如果您编写 add_up(*p,5) 您发送的不是“订单”选项卡的第一个元素的地址,而是 p 指向的变量的值,这意味着您发送值 100 *p => 我想得到 p 指向的值 p=> 我想得到 p 的值,所以 p 指向的变量的地址
猜你喜欢
  • 1970-01-01
  • 2023-03-08
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
  • 2020-10-08
  • 1970-01-01
相关资源
最近更新 更多