2012-01-12 4 views
0

У меня есть следующие сомненияИнициализация структуры указателя с массивом структуры

У меня есть структура массива. Раньше я его инициализировал напрямую и использовал в своем коде. Но мне предложили использовать указатели вместо прямой структуры. Но я не могу получить указатель, указывающий на массив structre правильно.

typedef struct 
{ 
    int a; 
    int b; 
} cqiReport; 


cqiReport s_cqiReport[2][2];  
cqiReport *ptr[2], *ptr2, *ptr3; 
s_cqiReport[0][0].a=1; 
s_cqiReport[0][0].b=1; 
*ptr= s_cqiReport; 
    *ptr2= s_cqiReport[0][0]; 
    *ptr3= s_cqiReport[1][0]; 

я PTR [0] указывает на s_cqiReport [0] [0] правильно, но PTR [2] указывает на какой-то мусор. Как получить ptr2 [1] указать на s_cqiReport [1] [0]?

Пожалуйста, помогите Благодаря DSP парень

+0

Вы работаете в C или C++? Это больше похоже на C, чем на C++, но вы должны перенаправить свой вопрос с обозначением языка. – Jack

ответ

0

Хорошо, это своего рода беспорядок. У вас есть s_cqiReport как многомерный массив и ptr как одномерный массив. Линия

*ptr = s_cqiReport 

не имеет смысла.

Кроме того, вы ничего не инициализировали фактическому экземпляру cqiReport.

Попробуйте следующее.

cqiReport *foo = new cqiReport; 
foo->a = 9; 
foo->b = 3; 

Это не отвечает на ваш вопрос, но это должно помочь.

+0

HI Mj, на самом деле я не хочу инициализировать с помощью указателей. Инициализация уже выполнена. Я хочу, чтобы указатель указывал на правильный адрес массива. – user437777

+0

ptr2 = & s_cqiReport [1] [0]; –

0

То, что вы должны понять, что массив на самом деле является указателем, так *ptr уже указывает на s_cqiReport[0][0], потому что он равен s_cqiReport, который сам по себе является указателем.

Теперь, если вы хотите, чтобы указатель указывал на значение, вы должны использовать оператор &, что по сути означает «адрес», поэтому что-то вроде ptr3= &(s_cqiReport[1][0]) делает точку указателя, где вы хотите.

Кроме того, я считаю, что ptr3 = s_cliReport + 2 также приведет к тому, что ptr3 укажет, где вы, похоже, хотите его указать, но я бы избегал выполнять арифметику на ваших указателях, пока у вас не будет четкого понимания указателей и как они работают.

Смежные вопросы