Jump to content

pptr problem – Funkcja zamieniająca wartości wskaźników (pointers)


Recommended Posts

Aplikacja z grubsza pobiera dowolną ilość dowolnych dany do dynamicznie zarządzanej tablicy wykorzystującej wskaźniki/pointer-y. Potem obraca tablicę i wypisuje.
Chciałbym zaimplementować funkcję „odwróć“ w tym kodzie. Jest aktualnie zakomentowana, abyście mogli skompilować kod. Program teraz działa po zaaplikowaniu alternatywy, więc można go odpalić i ogarnąć szybko koncepcję.  A potem przerobić... oczywiście, aby rozwiązać problem.

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <string.h>
#define int unsigned short int
#define MAX_STR_LEN 1024*1024 //MB


/*char** odwroc(char** pptr,int n){
	char *p;
	for (int i= 0, j=n-1;  i<j;  j=n-++i-1)
		p= *(pptr+i);
		*(pptr+i)= *(pptr+j)
		*(pptr+j)= p;
	}
	
	return pptr;
}*/

main(){
	int n;
	printf("Ile wartosci chcesz wpisac do tablicy?   "); scanf("%hu", &n);
	getchar(); system("cls");
	char *tablica[n];
	printf("Wypisz %hu wartosci dowolnego typu. Zatwierdz kazda wciskajac ENTER.\n",n);
	
	//Wczytywanie
	for (int i=0;i<n;i++){
		//Pobieranie
		printf("%4hu:  ",i+1);
		char str[MAX_STR_LEN]; int strLen;
		for (strLen= 0; strLen<MAX_STR_LEN; strLen++){
			char c= getchar();
			//Analiza c
			if (c=='\n' || c==EOF){
				str[strLen]= '\0';
				strLen++;
				break;
			}
			str[strLen]= c;
		}
		//Dodawanie
		tablica[i]= new char[strLen];
		strcpy(tablica[i],str);
	}
	
	puts("\nOdwracam twoja tablice."); //! odwroc(tablica, n);
	char *p;
	for (int i= 0, j=n-1;  i<j;  j=n-++i-1){
		///printf("Zamieniam '%s' z '%s'.\n", tablica[i],tablica[j]);
		p= tablica[i];
		tablica[i]= tablica[j];
		tablica[j]= p;
	}
	puts("Oto zawartosc twojej tablicy:");
	//Odczytywanie
	for (int i= 0; i<n; i++){
		printf("%4hu:  ",i+1); puts(tablica[i]);
	}
	
	printf("\n\nNacisnij ENTER aby zakonczyc prace programu."); getchar();
	return 0;
}

 

Możliwe że nie rozumiem mechaniki pointer-to-pointer.
Po skompilowaniu wersji z odkomentowaną funkcją „odwróć“ przy pomocy MinGW 9.2.0 program zwraca 4 błedy w:

pptr problem.cpp: In function 'char** odwroc(char**, short unsigned int)':
pptr problem.cpp:13:10: error: 'i' was not declared in this scope
   13 |   *(pptr+i)= *(pptr+j)
      |          ^
pptr problem.cpp:13:21: error: 'j' was not declared in this scope
   13 |   *(pptr+i)= *(pptr+j)
      |                     ^
pptr problem.cpp:15:2: warning: no return statement in function returning non-void [-Wreturn-type]
   15 |  }
      |  ^
pptr problem.cpp: At global scope:
pptr problem.cpp:17:2: error: expected unqualified-id before 'return'
   17 |  return pptr;
      |  ^~~~~~
pptr problem.cpp:18:1: error: expected declaration before '}' token
   18 | }
      | ^

Proszę o pomoc (wskazówka, link do odpowiedzi).  You can write in English.

a.exe

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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

×
×
  • Create New...