Wskaźniki - test C++

0

Witam serdecznie. Czy ktoś mógłby mi sprawdzić, czy dobrze wykonałem poniższe zadania umieszczone w załączonikach?

Teraz załączniki są bardziej przejżyste :)

1
  1. Dobrze

  2. Na pewno źle. Tam jest deklaracja tablicy 9 elementowej, powinno być 10.
    Ja bym to zrobił tak:

int tab[10];
	int *wsk = tab;
	wsk += 5;
	int liczby[] = { -10, -12, -13, -14, -15 };
	for (int i = 0; i < 5; i++)
	{
		*wsk = liczby[i];
		wsk++;
	}
  1. Kod zawiera kilka błędów, ale po poprawce wyglądało by to mniej-więcej tak:
tabint[0]-0
tabint[1]-1
tabint[2]-2
(...)
tabint[7]--2
tabint[8]--3
tabint[9]--4
int *wsk1;
int *wsk2;
double *wsk3;
wsk1 = wsk2;   // Według mojego kompilatora nie można, bo wskaźnik wsk2 nie był zainicjowany (error C4700: użycie niezainicjowanej zmiennej lokalnej "wsk2")
wsk3 = reinterpret_cast<double *>(wsk1);  // To samo co wyżej
wsk3 = (double *)wsk1;  // To też
void fun_wsk2(int *wsk)
{
	for (int i = 0; i < 10; i++)
	{
		*wsk += 2;
		wsk++;
	}

}





int main(int argc, char * argv[]) 
{
	int tablica[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int *wsk = tablica;

	fun_wsk2(tablica);

	for (int i = 0; i < 9; i++)
	{
		cout << tablica[i] << " " << endl;
	}

	system("pause");
	return 0;
}
int l;
	cout << "Podaj rozmiar tablicy" << endl;
	cin >> l;
	int *wsk = new int[l];
	delete[] wsk;
a) deklaracja tablicy 15 elementów typu int
b) definicja wskaźnika mogącego pokazywać na typ int i ustawienie go na tablicę
c) niepoprawnie, nie podano typu, więc operator new nie może przydzielić pamięci
d) wpisanie do zmiennej, na którą pokazuje wskaźnik, wartości 44
Sprawdzę resztę i edytuje post.
e) błąd, powinno to wyglądać tak: *tab = 44; lub tab[0] = 44;
f) źle
g) wpisanie liczby do 4 elementu tablicy (jeżeli wskaźnik pokazywał na 0 element, 0+3=3 czyli 4 element)
h) to samo co wyżej, tylko, że do 2 elementu
i) powinno być delete[] tab;
j) tak samo jak i)
0

Ale przecież zero też się liczy. Teraz Twoja tablica " int tab[10] " posiada 11 elementów : 0,1,2,3,4,5,6,7,8,9,10

0

Nie, przy deklaracji pisze się ile elementów ma pomieścić tablica.
Spróbuj skompilować:

 int tab[0];

Nie da się, bo tablica nie może mieć 0 elementów.
Dopiero po deklaracji elementy zaczyna się liczyć od 0.

0

Ok, dzięki za wyjaśnienie

1
Piotr020798 napisał(a):

Spróbuj skompilować:

 int tab[0];

Nie da się, bo tablica nie może mieć 0 elementów.

Prowadził ślepy kulawego ...

#include <stdio.h>

struct X
  {
   int x;
   char TB[0];
  };

 
int main()
  {
   char msg[]="Ala ma kota";
   struct X *p=(struct X *)malloc(sizeof(struct X)+strlen(msg)+1);
   p->x=1;
   strcpy(p->TB,msg);
   printf("%d -> %s\n",p->x,p->TB);
   return 0;
  }

http://ideone.com/hWG5ir

Mało tego że można to jeszcze czasami jest przydatne.

0

Mi chodziło o ten przypadek...

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