Я изучаю C, и я просто перешел через раздел указателей. В книге было предложено написать программу, которая объединяет два массива в один массив, передавая указатель на функцию. Я прошел через код, и все это выглядит нормально для меня, но почему-то результат дает смешанные результаты. Может кто-нибудь сказать мне, если что-то не так.Добавить программу Array не работает
//
// main.c
#include <stdio.h>
#include <unistd.h>
int *AddArrays(int *A, int *B, int a, int b);
int main(void)
{
int A[5] = {1,2,3,4,5};
int B[7] = {6,7,8,9,10,11,12};
int a = 5;
int b = 7;
int c = a + b;
int x = 0;
int NewArray[c], *ArrayPtr;
ArrayPtr = AddArrays(A,B,a,b);
for(x = 0; x < c; x++)
{
*(NewArray + x) = *ArrayPtr;
printf("Value of NewArray[%d] = %d\n", x, *(NewArray+x));
sleep(1);
ArrayPtr++;
}
return 0;
}
int *AddArrays(int *A, int *B, int a, int b)
{
int c;
int d;
int NewArray[a+b];
for (c = 0; c < a; c++)
{
NewArray[c] = *A;
A++;
}
for (d = 0; c < d; d++)
{
NewArray[a] = *B;
a++;
B++;
}
return NewArray;
}
Примечания: Я не думаю, что есть необходимость в использовании таНоса(), так как размер массива указан и новый размер массива явно объявлен.
Бонус Вопрос: есть ли способ, чтобы функция динамически реагировала на типы массивов. Прототип функции предназначен только для целых чисел и возвращает указатель типа «int». Это просто вопрос добавления этого странного преобразования (типа) infront переменной?
Что вы обнаружили, когда вы запускали этот код в своем отладчике? –
Он был успешно выполнен, но выход не распечатывал массив «A» с добавлением к нему «B». Вместо этого он печатает «1», «2», а затем случайные числа, а затем «0» для последних значений ячейки массива. – JCodder
Это не выход отладчика. Также обратите внимание, что это не соревнование. Не существует «необходимости» для вопроса _bonus. (если вы считаете, что типы на самом деле «привязаны»), вы должны перечитать главу о типах и о парадигмах программирования. – Olaf