Member 14060076 Ответов: 1

Как я могу передать структуру массива функции без указателя ?


Я пытаюсь передать структуру массива функции без указателя.

Я пытаюсь передать массив[], чтобы он напечатал следующее значение массива.

Приведенный ниже код имеет массив List[5] = {1,2,3,4}, где первый int в массиве
будет обработан в
struct Count numbers()
Я включил инкремент i, поэтому printCode() будет печатать целые числа numbers.intOne[1] & numbers.intTwo[1], numbers.intOne[2] & numbers.intTwo[2] и т.д...

Я хочу, чтобы программа запускала массив один за другим, например, 1 будет добавлен на 4 и добавлен на 6, что приведет к печати 57. И следующее значение будет равно 2, что приведет к 6 и 8. Но он будет принимать только одно и то же значение из структуры и продолжает печатать 575757.

Как я могу заставить функцию перейти к следующему значению массива (и напечатать 58), и возможно ли это без массива?

Что я уже пробовал:

#include <stdio.h>

struct Count {      //My struct
	int intOne;
	int intTwo;
};

struct Count numbers() {
	struct Count numbers;

	int List[5] = { 1, 2, 3, 4 };  //The array

	int i;
	for (i = 0; i < 10; i++) {           
		numbers.intOne = List[i] + 4;
		numbers.intTwo = List[i] + 6;
		return numbers;
	}
};

void printCode(struct Count numbers) {
	int i;
	for (i = 0; i < 2; i++) {
		printf("%i%i", numbers.intOne, numbers.intTwo); //This thing only prints 575757
	}
}

int main() {

	int i = 0;
	for (i = 0; i < 10; i++) {
		numbers();
		printCode(numbers());
		getchar();
	}

}

Aydin Homay

Насколько я знаю относительно кода, который вы предоставили выше, вы передаете счетчик структуры в printCode по значению, а не по ссылке, не могли бы вы более четко сформулировать свой вопрос, Чего вы пытаетесь достичь?

Member 14060076

@Aydin Homay да, я пытаюсь распечатать код по значению. Я хочу, чтобы программа запускала массив один за другим, например, 1 будет добавлен на 4 и добавлен на 6, что приведет к печати 57. И следующее значение будет равно 2, что приведет к 6 и 8. Но он будет принимать только одно и то же значение из структуры и продолжает печатать 57... И я хочу, чтобы это был 5768etc. Я надеюсь, что это достаточно ясно

1 Ответов

Рейтинг:
11

CPallini

В вашем коде много ошибок. Может быть вы имели в виду

#include <stdio.h>

struct Count
{      //My struct
  int intOne;
  int intTwo;
};

void printCode(struct Count numbers)
{
  printf("%i%i\n", numbers.intOne, numbers.intTwo);
}

void printNumbers()
{
  struct Count numbers = {0};

  int List[] = { 1, 2, 3, 4 };  //The array

  int i;
  for (i = 0; i < sizeof(List)/sizeof(List[0]); ++i)
  {
    numbers.intOne = List[i] + 4;
    numbers.intTwo = List[i] + 6;
    printCode( numbers );
  }
};

int main()
{
  printNumbers();
  getchar();
  return 0;
}

?


Member 14060076

Это то, что я ищу! Спасибо! Могу ли я спросить, что происходит с этим i < sizeof(List)/sizeof(List[0])? Я грубый новичок в Си, извините за ошибки, так как я буду учиться на них.

raddevus

sizeof(List) возвращает количество байтов, которые весь список занимает в памяти.
sizeof(List[0]) возвращает количество байтов, которые один элемент занимает в памяти.
Если Int равен Int32, то каждый из них занимает 4 байта.
Таким образом, если у вас есть 4 элемента в вашем списке, то sizeof(List) возвращает 16 байт.
И, конечно же, sizeof(List[0]) возвращает 4.
16 / 4 = 4
таким образом, пока i < 4 (0 - 3) будет выполняться цикл for.

CPallini

Добро пожаловать.