Работа с указателями, нужен совет.
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Работа с указателями, нужен совет. - 2010-09-04 22:53:14.590000
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
Есть код, он выделет память под N структур. Мне нужно перемешать указатели на структуры, потому что менять местами блоки памяти не рационально. Так как поинтеры на структуры в принципе не где не хранятся, то я подумал выделить память под указатели и под содержимое массивов. Заполнить массив указателей, на структуры. И потом перемешать массив указателей, и юзать все по прежнему.
#include <stdio.h>
#include <stdlib.h>
typedef unsigned int *PDWORD;
struct struct_A
{
char Name[255];
int ABC1;
int ABC2;
};
int main()
{
struct struct_A *ARRAY;
struct struct_A **ARRAY_POINTER;
int i, PN = 4;
ARRAY = (struct struct_A*) calloc(PN, sizeof(struct struct_A));
ARRAY_POINTER = (struct struct_A**) calloc(PN, sizeof(unsigned int));
for(i=0;i<PN;i++) ARRAY_POINTER[i] = &ARRAY[i];
for(i=0;i<PN;i++)
{
ARRAY[i].ABC1 = i;
ARRAY[i].ABC2 = i;
}
for(i=0;i<PN;i++)
{
printf("ARRAY[%X].ABC1 == %X\n", i, (struct struct_A) *ARRAY_POINTER[i].ABC1);
//printf("ARRAY[%d].ABC2 == %X\n\n", i, ARRAY_POINTER[i]);
}
getchar();
return 0;
}
Во первых не соображу как получить доступ к члену структуры quote:
printf("ARRAY[%X].A0 == %X\n", i, (struct struct_A) *ARRAY_POINTER.A0); Во вторых придется заменять много кода на другой вид, что приведет к плохой читабельности кода. Как лучше сделать?
|
|
|
RE: Работа с указателями, нужен совет. - 2010-09-04 23:37:45.600000
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
quote:
Могу предложить такой вариант. Ну я так и сделал. Думал можно как-то рациональнее поправить код.
|
|
|
|
|