2015-02-18 2 views
1

Итак, у меня есть простая программа на C, которая вычисляет сумму элементов в массиве. Проблема, как мне представляется, - это нотация int[] arr. По-видимому, правильная нотация - int arr[]. При запуске моей программы с первой нотой я получил около восьми ошибок. Когда ни одна из ошибок не имела смысла для меня, я просто использовал вторую запись массива, и она сработала.Как нотация массива влияет на эту программу?

Вот код-

#include <stdio.h> 

int sumOfArray(int[], int); 

int main() 
{ 
    int[] A={1,2,3,4,5}; 
    int sum=0; 
    int size=sizeof(A)/sizeof(A[0]); 
    sum=sumOfArray(A,size); 
    printf("\n The sum of the array is: %d\n", sum); 
    return 0; 
} 

int sumOfArray(int[] arr, int n) 
{ 
    int sum=0,x; 
    for (x=0; x<n; x++) { 
     sum+=arr[x]; 
    } 
    return sum; 
} 

Если это помогает, вот генерируемые ошибки:

p6.c:15:8: error: expected identifier or '(' 
    int[] A={1,2,3,4,5}; 
    ^
p6.c:17:21: error: use of undeclared identifier 'A' 
    int size=sizeof(A)/sizeof(A[0]); 
        ^
p6.c:17:31: error: use of undeclared identifier 'A' 
    int size=sizeof(A)/sizeof(A[0]); 
          ^
p6.c:18:20: error: use of undeclared identifier 'A' 
    sum=sumOfArray(A,size); 
       ^
p6.c:23:22: error: expected ')' 
int sumOfArray(int[] arr, int n) 
        ^
p6.c:23:15: note: to match this '(' 
int sumOfArray(int[] arr, int n) 
      ^
p6.c:23:5: error: conflicting types for 'sumOfArray' 
int sumOfArray(int[] arr, int n) 
    ^
p6.c:11:5: note: previous declaration is here 
int sumOfArray(int[], int); 
    ^
p6.c:23:19: error: parameter name omitted 
int sumOfArray(int[] arr, int n) 
       ^
p6.c:26:17: error: use of undeclared identifier 'n' 
    for (x=0; x<n; x++) { 
       ^
p6.c:27:14: error: use of undeclared identifier 'arr' 
     sum+=arr[x]; 
      ^

я был под впечатлением, что оба нотации массива являются приемлемыми. Фактически, во многих случаях рекомендуется int[] arr. Но что тут случилось? Какие-либо предложения?

Большое спасибо!

+1

Дальше всего можно увидеть: 'ИНТ [] arr' действует Java. – Quentin

+0

Пожалуйста, отметьте правильный ответ, нажав галочку. Помогло бы многим людям :) –

ответ

3

Вы должны смутить себя Java.

int arr[] общий синтаксис с C и C++, поскольку это означает целое число от переменной, которая является массивом

Но с Java, int[] arr используется как это означает, что обр имеет тип массива целых чисел. (Вид)

+1

более конкретно: в Java, помимо специального синтаксиса относительно массивов ('int [] arr' обычно используется в Java, а' int arr [] 'предоставляется только для ознакомления с C) типы всегда предшествуют именам переменных в объявлениях. – immibis

2

Код Шоул быть, как это

#include <stdio.h> 

int sumOfArray(int[], int); 

int main() 
{ 
    int A[]={1,2,3,4,5}; 
    int sum=0; 
    int size=sizeof(A)/sizeof(A[0]); 
    sum=sumOfArray(A,size); 
    printf("\n The sum of the array is: %d\n", sum); 
    return 0; 
} 

int sumOfArray(int arr[], int n) 
{ 
    int sum=0,x; 
    for (x=0; x<n; x++) { 
     sum+=arr[x]; 
    } 
    return sum; 
} 
1

int[] arr не правильный способ объявить массив в C. int arr[] - это правильный способ (Подробнее см. В here)

Об ошибках: Ошибки выбрасываются из-за неправильного объявления массива. Даже определение параметра массива в объявлении метода.

Исправленный код

#include <stdio.h> 

int sumOfArray(int[], int); 

int main() 
{ 
    int A[]={1,2,3,4,5}; // int A[5]={1,2,3,4,5} too is valid 
    int sum=0; 
    int size=sizeof(A)/sizeof(A[0]); 
    sum=sumOfArray(A,size); 
    printf("\n The sum of the array is: %d\n", sum); 
    return 0; 
} 

int sumOfArray(int arr[], int n) 
{ 
    int sum=0,x; 
    for (x=0; x<n; x++) { 
     sum+=arr[x]; 
    } 
    return sum; 
} 

Добавлено: int[] arr действует в таких языках, как C# и Java не спутать его с C

Смежные вопросы