Zwiększanie wartości wskaźnika

0

Mam taki fragment kodu:

#include <stdio.h>

#define dd = 3;
int aa = 12;

int main()
{
	int bb[2] = {7}, *cc = &bb[0];
	*cc = *bb + 1;
	cc++;
	*cc = *bb - 1;
	cc[0] = 17;
	return 0;
}

Nie rozumiem co robi polecenie

cc++;

Myślałem, że zwiększy, to wartość

*cc

.

2
int *cc = &bb[0];      // cc wskazuje na bb[0]
cc++;                  // cc wskazuje na bb[1]
0

Ok, dziękuję.

Mam jeszcze jedno podobne pytanie.

#include <stdio.h>

enum aa{bb} cc=bb;

int main()
{
	static int *dd;
	int ee[2] = {3};

	printf("%s%d", "ee[0]: ", ee[0]);	putchar('\n');
	printf("%s%d", "ee[1]: ", ee[1]);	putchar('\n');putchar('\n');

	dd = ee+1;	//wskazuję na następną komórkę tabeli e, czyli e[1]
	dd[-1] = ( *(ee+1) ) + 2;
	printf("%s%d", "dd[-1]: ", dd[-1]);	putchar('\n');
	return 0;
}

Ktoś może wyjaśnić o co chodzi z tą linijką:

dd[-1] = ( *(ee+1) ) + 2;

?
Domyślam się, że do wartości z tabeli ee[1] dodaje wartość 2, czyli wynik = 2, bo ee[1]==0;
Tylko dlaczego zostało użyte dd[-1]?
Może być ujemna komórka? Dlaczego nie mogę wpisać dd[-2], wtedy wyskakuję błąd.

0

Jeśli masz wskaźnik dd, to zapis dd[x] jest równoważny *(dd + x), czyli dd[-1] to *(dd - 1). Nie należy tego używać.

Dlaczego nie mogę wpisać dd[-2], wtedy wyskakuję błąd.

dd = ee+1;

dd[-1] wskazuje na ee[0], a dd[-2] już wskazuje na pamięć nienależącą do Ciebie.

0

Ok w miarę ogarniam.
Teraz mam taką linijkę: d--;

...
    dd = ee+1;    //wskazuję na następną komórkę tabeli e, czyli e[1]
    dd[-1] = ( *(ee+1) ) + 2;
    printf("%s%d", "dd[-1]: ", dd[-1]);    putchar('\n');
    d--;
    return 0;
}

Skoro przed poleceniem d--; d[-1] wskazywało 2, a d[0] wskazywało 0, to dlaczego po dodaniu d--; wszystko idzie do przodu?
Tzn. d[0] == 2, a d[1] == 0;

`dodanie znaczników ``` - @furious programming

1 użytkowników online, w tym zalogowanych: 0, gości: 1