为什么我的C程序在循环循环时会出现错误?

问题描述 投票:0回答:3
当我尝试运行以下C代码时,它无法按预期工作。我试图将数组的元素向左移动,但是我会遇到错误。我的代码怎么了?

#include <stdio.h> int main() { int arr[] = {1,5,7,10}; for (int i = 0; i < arr; i++) { arr[i] = arr[i+1]; } for (int i = 0; i < arr; i++) { printf("Arr[%d] = %d\n", i, arr[i]); } return 0; }
我试图在第一个循环中使用数组的大小,但这并不能解决问题。
我注意到的是:
我不确定如何正确循环循环。
循环条件i

< arr does not seem correct. Is my array modification (arr[i] = arr[i+1];) valid? Could someone help me understand why this doesn't work and how to fix it? Thanks!

i < arr
c
3个回答
0
投票

sizeof
是您需要的操作员。

sizeof(arr)
,给出整个阵列的组合大小,从而产生

16 bytes
  1. sizeof(arr) / sizeof(arr[0)
    ,给出每个元素的大小,因为
    sizeof(arr[0])
    会导致
  2. 4 bytes
  3. ,所以你的
    for
    应该像这样:
    for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
    {
        // code
    }
    

i < arr
是毫无意义的,不会编译。您将整数与数组进行比较(已将其“腐烂”为指向第一个元素的指针)。

0
投票
建议初学者学习哪种编译器选项C?
  • 您无法遍及整个数组的整个尺寸,因为然后在最后的迭代中将访问数组,从界限访问。
    

    Quick Fix:i+1

    在两个地方到
  • i < arr
  • 或更优雅的修复程序:通过执行

    i < 3
    来摄取静态大小阵列的大小。这意味着将字节中的数组的大小划分,并用字节中的一个数组元素的大小进行将其划分。在您的具体示例中,假设

    sizeof(arr) / sizeof(arr[0])
  • 是4个字节,那么我们得到总尺寸4*4 =16。16 / 4 =4.
fixed示例:

int

#include <stdio.h> int main() { int arr[] = {1,5,7,10}; for (int i = 0; i < sizeof(arr)/sizeof(arr[0]) - 1; i++) { arr[i] = arr[i+1]; } for (int i = 0; i < sizeof(arr)/sizeof(arr[0]) - 1; i++) { printf("Arr[%d] = %d\n", i, arr[i]); } return 0; }

正在比较
for (int i = 0; i < arr; i++)
与数组的内存,而不是数组的大小。 
i

在这里是你的朋友。即使这样,您的程序也很容易读取阵列的末尾。当

sizeof

等于数组的大小时,
i
太大了。

-1
投票

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.