У меня возникают проблемы с массивом в C, который должен содержать несколько структур, которые я определил ранее;C: Свойства моей структуры не меняются при ссылке из массива?
Struct:
typedef struct
{
bool alive;
struct Vector velocity;
struct Vector acceleration;
struct Coordinate position;
float mass;
int ID;
}Sprite;
Массив:
Sprite Sprites[10];
Для создания Структуры проще, у меня есть функция, которая создает их для меня:
Создать Функция построения:
Sprite createNewSpriteWithID(int ID, int Mass)
{
Sprite newSprite;
newSprite.ID = ID;
newSprite.mass = Mass;
newSprite.velocity = VectorWithZero();
newSprite.acceleration = VectorWithZero();
newSprite.alive = 1;
int index = returnAvailableSpriteIndex();
if (index < 11 && index > -1){
Sprites[index] = newSprite;
printf("Sprite inserted at Index: %d\n",index);
spriteCount += 1;
} else {
printf("Notice: Sprite not added");
}
return Sprites[index]; // FIXED MY BAD
}
Эта функция делает мне новый Struct, а затем присваиваю значения некоторым свойствам. Однако я не занимаюсь этим, потому что я хочу изменить это сам.
Проблема: Проблема в том, что когда я пытаюсь изменить позиции самостоятельно, они не отражаются в массиве.
int main(int argc, const char * argv[]) {
// Create a test Sprites.
Sprite Sprite_A;
// Set Sprite Positions and parameters
Sprite_A = createNewSpriteWithID(1,300);
setPositionForSprite(&Sprite_A,100,100);
printf("\nPOS: %f, %f\n",Sprite_A.position.x,Sprite_A.position.y);
return 0;
}
вызвать функцию под названием setPositionForSprite, который присваивает позицию позиции имущества переданного указателя спрайтов.
Set Position:
void setPositionForSprite(Sprite *S, float x, float y)
{
S->position.x = x;
S->position.y = y;
}
Это где проблема становится очевидной. Когда я спрайт позицию вскоре после назначения его в Main, он выходит, как предполагалось
100,100
Однако, когда я печатаю спрайты [index_of_Sprite_A], это дает мне значения мусора. Почему это происходит?
я могу это исправить, изменив переключающий положение линии внутри основной для:
setPositionForSprite(&Sprites[0],100,100);
Но это неосуществимо, как я должен напомнить, что индекс был.
Почему не меняют свойства моей структурной переменной, изменяют их в массиве?
'if (индекс <11..' должен быть' if (index <10..'. –
@SouravGhosh returnAvailableSpriteIndex() возвращает 11, если нет позиции. Поскольку нуль является допустимой позицией, я выбрал ее для возврата числа> 10. 10. – Micrified
Я думаю, что на этот раз я действительно исправил ваш код ...... –