Мне просто интересно, есть ли способ сделать массив указателей, указывающих на первый столбец каждой строки в многомерном массиве целых чисел. В качестве примера, пожалуйста, посмотрите на следующий код:Массивы указателей, которые указывают на массивы целых чисел
#include <stdio.h>
int day_of_year(int year, int month, int day);
main()
{
printf("Day of year = %d\n", day_of_year(2016, 2, 1));
return 0;
}
static int daytab[2][13] = {
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
int day_of_year(int year, int month, int day)
{
int leap;
int *nlptr = &daytab[0][0];
int *lpptr = &daytab[1][0];
int *nlend = nlptr + month;
int *lpend = lpptr + month;
leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
if (leap)
for (; lpptr < lpend; lpptr++)
day += *lpptr;
else
for (; nlptr < nlend; nlptr++)
day += *nlptr;
return day;
}
Когда я пишу, как это показано ниже:
int *p[2];
*p[0] = daytab[0][0];
*p[1] = daytab[1][0];
Я получаю сообщение об ошибке, как это:
Error: Array must have at least one element
Error: Variable 'p' is initialized more than once
Error: { expected
Error: Variable 'p' is initialized more than once
Error: { expected
***5 errors in Compile***
Я изменил его, как это:
int *p[2];
p[0] = &daytab[0][0];
p[1] = &daytab[1][0];
Я все еще получаю такая же ошибка.
Я знаю, что мы можем сделать массив указателей на символьные строки, как в следующем:
char *str[] = {
"One", "Two", "Three",
"Four", "Five", "Six",
"Seven", "Eight", "Nine"
}
Как мы делаем это для массивов целых чисел?
"* Это не работает *" является более или менее стоит сообщить об ошибке можно дать. Пожалуйста, уточните ошибку, предупреждение, неисправность, которую вы получаете, соблюдайте! – alk
Первый пример: большой шанс вызвать разрыв сегментации путем разыменования неверного указателя. Второй пример: Не могли бы вы объяснить, что вы подразумеваете под «не работает»? – MikeCAT
Код, как показано (с использованием второго подхода), выглядит хорошо для меня. – alk