• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przekazanie tablicy do funkcji przez referencję Problem

VPS Starter Arubacloud
0 głosów
2,744 wizyt
pytanie zadane 13 stycznia 2017 w C i C++ przez programista15k Początkujący (370 p.)

void fun(char *tab) 
{
	while(*tab != '\0')
	{
		// cos tam 
				
		tab++;
	}
}

int main()
{
	
	char *tab= "jakis tam tekst";
	
	fun(tab);
	
	return 0;
}

Witam, mam jeden banalny problem. W swojej funkcji jako argument przekazuje tablice char'ów.
Wszystko jest ok, działa jednak chciałbym by funkcja zmieniała tą tablicę a nie działała na jej kopi.
Muszę więc użyć referencji. & - problem w tym, że jest to tablica i nie za bardzo wiem jak to zmienić

void fun(char &tab)  ? raczej nie -> a nawet jeśli to później mam problem bo *tab będzie nieznana i nie będę mógł wykonywać swoich instrukcji wewnatrz funkcji. Proszę o pomoc

1 odpowiedź

0 głosów
odpowiedź 13 stycznia 2017 przez Kasztan Dyskutant (8,080 p.)
Nie przekazujesz tablicy charów tylko ciąg znakowy. Zastawów się co chcesz zrobić.
komentarz 13 stycznia 2017 przez programista15k Początkujący (370 p.)
Mam   char *tab= "jakis tam tekst";

Powiedzmy, że wykonuje później moją funkcje fun(tab); która np. zamienia tekst na same duże litery. Wszystko działa, ale tablice z duzymi znakami mam tylko w fun(tab) a chciałbym jej używać w mainie.

jak zrobie teraz cout << tab; to wypisze mi się tekst taki jak był na początku czyli "jakis tam tekst"
komentarz 13 stycznia 2017 przez Kasztan Dyskutant (8,080 p.)
to nie jest tablica, nie rozumiesz ?
komentarz 13 stycznia 2017 przez programista15k Początkujący (370 p.)
ciąg znakowy, okej
komentarz 13 stycznia 2017 przez Kasztan Dyskutant (8,080 p.)

Nie rozumiesz, że to co chcesz przekazać to nie jest tablica, tablice inaczej się przekazuję do funkcji. Jeśli chcesz przekazać ciąg znakowy jako referencje to polecam zrobić to tak

#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;

void fun(string & tab)
{	
	int i = 0;
	while (tab[i] != '\0')
	{	
		cout << tab[i] << endl;
		tab[i] = toupper(tab[i]);
		i++;
	}
	
}

int main()
{

	string tab{ "jakis tam tekst" };

	fun(tab);
	cout<<endl;
	cout << tab << endl;
	

	

	return 0;
}

 

komentarz 13 stycznia 2017 przez programista15k Początkujący (370 p.)

Dziękuję za kod, zdaję sobie sprawę, że mylę pojęcia.
Generalnie do funkcji przesłać mam "tablicę znaków"
oraz zastosować notacje wskaźnikową do poruszania się po tablicy znaków.

Czyli wydaje mi sie, że nie za bardzo mogę użyć stringów

Mój kod wygląda tak:

 

void zamien(char *tab) 
{
	char znak;
	
	while(*tab != '\0')
	{
		znak = *tab;
		
		if(znak > 95)
         {
              znak = znak - 32;
         }
		tab++;
	}
}

 

komentarz 13 stycznia 2017 przez Kasztan Dyskutant (8,080 p.)
Masz napisać funkcje, która nic nie zwraca a jej argumentami jest tablica typu char ?

I która będzie mogła wprowadzać zmiany na tej tablicy ?
komentarz 13 stycznia 2017 przez programista15k Początkujący (370 p.)
Jak przyjmę przez referencję to nie musi nic zwracać a będą zmiany.

Podobne pytania

+2 głosów
3 odpowiedzi 313 wizyt
0 głosów
1 odpowiedź 313 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...