2013-03-11 3 views
-1

hi Я пытаюсь создать программу, которая принимает массив из 7 элементов в качестве аргумента и возвращает третий-пятый элемент этого массива в меньший массив, однако в настоящее время я получаю эту ошибкуПередача массивов в функции

assign8p7.c: In function 'main': 
assign8p7.c:18:2: warning: passing argument 1 of 'copysect' makes pointer from 
integer without a cast [enabled by default] 
assign8p7.c:3:6: note: expected 'int *' but argument is of type 'int' 

от того, что я могу сказать, предупреждение имеет проблему со мной, передавая ему массив в аргументах, кто-нибудь знает, как я могу это исправить? также любые другие рекомендации для моего кода приветствуются.

#include <stdio.h> 

int *copysect(int ar[],int start,int end) 
{ 
int i; 
static int retar[3]; 
for(i = 0; i<3;i++) 
{ 
    retar[i+start]=ar[i+start]; 
} 
return retar; 
} 

int main(int argc, char const *argv[]) 
{ 
int arry[7] = {1,2,3,4,5,6,7}; 
int miniarry[3]; 
miniarry[0] = *copysect(arry[0],3,5); 
return 0; 
} 
+0

Измените название, чтобы быть более информативным, пожалуйста .. – Maroun

+0

@MarounMaroun, у вас есть возможность сделать это самостоятельно, вы знаете :) – StoryTeller

+0

@StoryTeller Да, но я хочу, чтобы он знал, что он должен делать это (на будущее) :) – Maroun

ответ

0
  1. Вы вызываете функцию copysect с первым элементом массива, а не указатель на массив. Правильный ответ:

    copysect(arry,3,5); 
    
  2. Вы можете вычислить разницу в массиве динамически. Теперь абонент функции copysect должен знать, что разница между началом и концом является 2.

    int retar[end - start + 1] 
    
  3. уступка в цикл неправильно. Вы разыменование значения, которое выходит за рамки retar массива

    retar[i]=ar[i+start]; 
    
  4. При вызове функции copysect, вы присваивающий только первый элемент в miniarry разыменования массива, что функция возвращает, а не в целом массив.

  5. Это не лучшая идея иметь статический массив в функции (это было бы проблематично, если вы вызывали функцию более одного раза и т. Д.). Вместо этого вы можете объявить меньший массив elswhere и передать его в качестве параметра функции.

    void copysect(int ar[], int retar[], int start,int end,) 
    
+0

благодарю вас за информацию, я обязательно буду ее использовать, если я могу задать вам еще один быстрый вопрос, я внес изменения, которые вы предложили в своем ответе, и я получение ошибки в строке 17 моего кода, которая утверждает, что мини-класс является несовместимым типом при назначении типа «int [3]» из int, теперь я предполагаю, что это потому, что моя функция возвращает int, а не массив, однако, когда я удаляю int моя программа вылетает из-за каких-либо соображений относительно того, почему это может быть? – undone98

5
int *copysect(int ar[],int start,int end) 

Хорошо, copysect принимает в качестве первого параметра массив целых чисел.

miniarry[0] = *copysect(arry[0],3,5); 

К сожалению, вы передали ему одно целое число, а не массив.

+1

Среди других странностей. – user7116

+3

Упс! Если бы только что-нибудь ему это сказал. – iamnotmaynard

+1

@iamnotmaynard К сожалению, весь компилятор сказал: 'assign8p7.c: 3: 6: note: expected 'int *', но аргумент имеет тип 'int'', который вообще не помогает. –

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