Премини към съдържанието
  • Добре дошли!

    Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

    Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

     

Въпрос свързан с С


andrean4eto

Препоръчан отговор

Здравейте, имам едно въпросче свързано с С и по точно с индексиране на масиви чрез указатели. Може да ви се стори елементарен моя въпрос, но аз от скоро се занимавав с програмиране на С. Формулата за достигане до елемент на двумерен масив е *(адрес на първи елемент от масив+брой стълбове*номер на ред+мястото на търсения елемент в реда),

но на мен не6то не ми се получава, при компилирането компютъра блокира. sad.gif

#include<stdio.h>

int main(void)

{

int a[6][6],i,j,n=2,m=2,*p;

p=a[6];

for (i=0;i<n;i++)

for (j=0;j<m;j++) scanf("%d",*(p+(i*m)+j));

for (i=0;i<n;i++)

for (j=0;j<m;j++) printf(" a[%d][%d]=%d",i,j ,a[j]);

}

Линк към коментара
Сподели в други сайтове

Проблемът се състои в това, че функцията scanf() очаква да й се подаде адресът на дадения операнд чрез reference operator (&), където да запази стойността прочетена от входа, а ти всъщност използваш dereference operator (*), като по този начин не подаваш адресът, а физическата стойност съхранявана на този адрес.

/* scanf() usage */ 

 for(i=0; i<r_max; i++) {

        for(j=0; j<c_max; j++) {

            printf("Enter [%d] value: ", i); // starts by 0 (zero)

            scanf("%d", &tmpArray[i][j]); 

        }

    }

За многомерни масиви, използването само на pointer arithmetic определено прави кода трудно разбираем за останалия свят, както и за теб след време, все пак, ако искаш да научиш как всъщност става и да разбереш отгоре какво всъщност указваш на компилатора по този начин, прегледай следния tutorial: http://www.gamedev.net/reference/articles/article1697.asp

Редактирано от krisku (преглед на промените)
Линк към коментара
Сподели в други сайтове

Благодаря ти за отговора, разбрах къде греша. На мен като цяло ми трябва указателната аритметика за да достигам елементите на масива във функия и доста време се чудих защо не ми се получава. :mark:

Редактирано от andrean4eto (преглед на промените)
Линк към коментара
Сподели в други сайтове

Трябва ти просто за да го усвоиш като материал, или какво? Защото наистина ако имаш многомерен масив ( > 2D array) кодът ще е адски неразбираем за външния свят.

Линк към коментара
Сподели в други сайтове

Добавете отговор

Можете да публикувате отговор сега и да се регистрирате по-късно. Ако имате регистрация, влезте в профила си за да публикувате от него.

Гост
Публикацията ви съдържа термини, които не допускаме! Моля, редактирайте съдържанието си и премахнете подчертаните думи по-долу. Ако замените букви от думата със звездички или друго, за да заобиколите това предупреждение, профилът ви ще бъде блокиран и наказан!
Напишете отговор в тази тема...

×   Вмъкнахте текст, който съдържа форматиране.   Премахни форматирането на текста

  Разрешени са само 75 емотикони.

×   Съдържанието от линка беше вградено автоматично.   Премахни съдържанието и покажи само линк

×   Съдържанието, което сте написали преди беше възстановено..   Изтрий всичко

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Добави ново...