Как инициализировать указатель int внутри структуры, передавая его массиву в C? - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть структура, чтобы сказать:

struct mystruct {
       int *myarray;
}

В моей основной функции я хочу присвоить "myarray" значения предопределенного массива.

int main(){
   int array[5] = {1,2,3,4,5};
   //how to "assign" array values to myarray ?;
}

Я хотел бы избежать создания цикла назначения, например:

struct mystruct str = malloc(sizeof(mystruct));
for(int i = 0;i<size_of_array;i++){
    str->myarray[i] = array[i];
}

это возможно?

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019
struct mystruct {
       int *myarray;
}

здесь myarray это просто указатель на память.Там не зарезервировано место, поэтому ваш пример потерпит неудачу.

У вас есть два варианта:

  1. Просто используйте уже имеющийся массив, это предполагает, что массив неfree'd перед структурой free'd:

    instance->myarray = array;

  2. резервная память и запоминание данных

    instance->myarray = malloc(sizeof(int) * 5);
    memcpy(instance->myarray, array, sizeof(int) * 5);
    
0 голосов
/ 15 февраля 2019

Рассмотрим:

typedef struct test
{
    int i;
    char c[2][5];
} test;

Это можно инициализировать с помощью:

test t = {10, {{'a','b','c','d','\0'}, { 0 }}};
// or
test t = {10, {{'a','b','c','d','\0'}, {'x','y','z','v','\0'}}};
0 голосов
/ 15 февраля 2019

вы можете попробовать memcpy

struct->array = malloc(sizeof(some_array));
memcpy(struct->array, some_array, sizeof(some_array));

, а для вашего случая это

   str->array = malloc(sizeof(array));
   memcpy(str->array, array, sizeof(array));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...