#include <stdio.h>
#define MEM_SIZE 16
typedef struct memory_contents{
unsigned char mem[MEM_SIZE]; /* memory */
} mem;
mem init(char prog[]){
mem chip = {prog};
return chip;
}
int main(int argc, char *argv[]){
char memory[MEM_SIZE] = {0}; /* zero out whole array */
mem chip = init(memory);
printf("%d\n", chip.mem[0]);
return 0;
}
Я правильно понял, что этот код (в частности, функция init) пытается поместить адрес переменной 'memory' в массив struct? (и, следовательно, именно поэтому он печатает ненулевое значение)Простые проблемы с массивом C
То, что я пытаюсь достичь, это инициализировать структуру таким образом, чтобы массив mem структуры был параметром prog []. Какой предпочтительный или лучший способ сделать это? Я мог бы сделать mem структуры struct указателем на первый элемент массива размера MEM_SIZE, но я чувствую, что это может вызвать проблемы: если я изменил массив памяти в main позже по строке, он также изменит значения в массиве микросхемы ,
Что случилось с скрепляющих инициализаторах - при правильном использовании, конечно? Почему они запутывают? –
Это путает * здесь *, потому что он инициализирует массив, а не скаляр. (Например: присваивает ли значение первому элементу или всему массиву? Он даже компилируется? Если нет, это потому, что вы не можете назначить указатель на «char» или из-за чего-то еще? заставляет читателя слишком много думать.) Мне не нравятся они вообще по другим причинам, но это только личный вкус; в этом конкретном случае, я думаю, их лучше избегать. – Mehrdad
Спасибо - memcpy кажется достойным решением. Моя единственная проблема заключается в том, что если я изменю MEM_SIZE на что-то большое, сделаю ли копирование заметное количество времени? – user559865