Wskaźnik łańcucha w c

Wskaźnik łańcucha w c
String to nic innego jak tablica znaków, która zawiera wszystkie typy znaków wartości typu danych. Za pośrednictwem ciągu możemy uzyskać dostęp do dowolnego znaku z jego indeksem. w bardzo szybki sposób. Dzisiaj naszym tematem jest to, że możemy uzyskać dostęp do ciągów za pośrednictwem wskaźnika. Nazywa się to wskaźnik ciągów. Wyjaśnimy, w jaki sposób wskaźnik pomoże nam uzyskać dostęp do całego indeksu ciągu.

Dostęp do ciągu przez wskaźnik

Wskaźnik char:

  • String jest przechowywany w tablicy char.
  • Char s [10] = ”komputer”,
  • Char wskaźnik może wskazywać na blok char.
  • Char *p; p = & s [0], p+1 = 1001, reprezentuje adres następnego bloku.

*(p+i) = s []

Wyjaśnienie

Na powyższym schemacie załóżmy, że narysujemy wskaźnik, który jest znakiem typu i deklarujemy ciąg, którego adres podstawowy to 1001. Tak więc adres następnego bloku to 1002. Ponieważ każda wartość typu znaku zawiera 1 bajt w pamięci, jeśli adres podstawowy 1St blok to 1001, więc adres następnego bloku musi wynosić 1002 i tak dalej. Teraz wskaźnik P zawiera adres 1St blok oznacza adres podstawowy tego konkretnego ciągu. Oznacza to, że wartość wskaźnika wynosi 1001. Za pośrednictwem tego adresu podstawowego możemy łatwo uzyskać dostęp do wszystkich elementów łańcucha.

Ciąg stały

  • String literal = ciąg stała // ciąg
  • Printf („komputer”); [które piszemy w „”, który nazywa się ciąg stałą lub dosłowną lub ciągiem]
  • Char s [10] = „komputer”;
  • Printf (s); Tylko zapis oznacza, że ​​reprezentuje adres pierwszego bloku tablicy S []. Oznacza to, że tutaj przekazujemy 1000. adres pierwszego bloku tablicy S [].
  • Strlen (y); Podajemy adres pierwszego bloku Array S [].
  • Strlen (& s [0]) = strlen (s) = strlen („komputer”);

Przykład 1

W tym przykładzie możemy zobaczyć wskaźnik, że możemy obliczyć całkowitą długość ciągu.

#włączać
int długość (char *p)

int count = 0;
While ( *p != '\ 0')

count ++;
P ++;

powrót;

int main ()

Char Str [100]; // deklarowanie ciągu.
int l;
printf („\ n Wprowadź dowolny ciąg:”);
gets (str);
L = długość (str); // długość łańcucha.
printf („\ n długość danego ciągu: %d \ n”, l);
powrót 0;

Wyjście

Wyjaśnienie

Tutaj definiujemy nazwy funkcji długość (). W tej funkcji używamy pętli while, w której podano warunek, że pętla nie zostanie zakończona, dopóki wskaźnik *P może uzyskać dostęp do wszystkich elementów ciągu. W funkcji Main () deklarujemy ciąg o nazwie Str [], aby wziąć ciąg od użytkownika. Teraz przekazujemy ciąg w nawiasie funkcji długości (), aby obliczyć długość ciągu.

Przykład-2

Tutaj zobaczymy wskaźnik, możemy odwrócić ciąg.

#włączać
void reverse (char [], int, int);
int main ()

char str [100], temp; // deklarowanie ciągu.
int I, J, Len;
printf („\ n Wprowadź dowolny ciąg:”);
gets (str);
len = strlen (str);
Odwrotność (str, 0, len - 1); // Odwracanie ciągu.
printf ("\ n ciąg po cofnięciu = %s \ n", str);
powrót 0;

void reverse (char str [], int i, int len)

Char Temp;
temp = str [i];
Str [i] = str [len - i];
Str [len - i] = temp;
if (i == len/2)

powrót ;

Odwrotność (str, i + 1, len);

Wyjście

Wyjaśnienie

Tutaj wewnątrz głównej funkcji () deklarujemy ciąg o nazwie Str [] i bierzemy ciąg od użytkownika za pomocą funkcji gett (), z tym wyjątkiem, że definiujemy funkcję nazwaną odwracać () odwrócić ciąg za pomocą wskaźnika, który może uzyskać dostęp do wartości STR [].

Przykład-3

Tutaj zobaczymy wskaźnik, możemy skopiować ciąg.

#włączać
/ * Prototyp funkcji */
Kopia void (Char S2 [30], Char S1 [30]);
/* Główna funkcja */
int main ()

Char S1 [30], S2 [30];
int i;
printf („Enter String: \ n”);
Gets (s1);
kopia (S2, S1);
printf („String skopiowany to: %s \ n”, s2);
powrót 0;

/* Definicja funkcji*/
Kopia void (Char S2 [30], Char S1 [30])

int i;
dla (i = 0; s1 [i] != '\ 0'; i ++)

s2 [i] = s1 [i];

s2 [i] = '\ 0';

Wyjście

Wyjaśnienie

Tutaj wewnątrz głównej funkcji () deklarujemy dwa ciągi o nazwie S1 [] i s2 [] i bierzemy ciąg od użytkownika za pomocą funkcji gett () w ciągu s1 []. Z wyjątkiem tego, że definiujemy funkcję nazwaną Kopiuj () Aby skopiować ciąg S1 [] do ciągu S2 [] za pośrednictwem wskaźnika, który może uzyskać dostęp do wartości String S1 [].

Przykład-4

Tutaj zobaczymy wskaźnik, który możemy porównać ciąg z innym ciągiem.

#włączać
// funkcja, która porównuje dwa ciąg
Void Comparsestrings (char* x, char* y)

Int flaga = 0;
// iteruj pętlę do końca
// obu sznurków
While (*x != '\ 0' || *y != '\ 0')
if ( *x == *y)
x ++;
y ++;

// Jeśli dwa znaki nie są takie same
// Wydrukuj różnicę i wyjdź
w przeciwnym razie if (( *x == '\ 0' && *y != '\ 0')
|| (*X != '\ 0' && *y == '\ 0')
|| *X != *y)
flaga = 1;
printf („nierówne ciągi \ n”);
przerwa ;


// Jeśli dwa ciągi są dokładnie takie same
if (flaga == 0)
printf („równe ciągi \ n”);


// kod sterownika
int main ()

// podane struny S1 i S2
char S1 [20] = "Python";
char s2 [20] = "dsa";
// wywołanie funkcji
Porównanie (S1, S2);
powrót 0;

Wyjście

Wyjaśnienie

Tutaj wewnątrz głównej funkcji () deklarujemy dwa ciągniki o nazwie S1 [] i S2 []. W S1 [] przypisujemy wartość o nazwie „pyton" oraz w s2 [] nazwanym „DSA. " Z wyjątkiem tego, że definiujemy funkcję nazwaną porównywać () Aby porównać ciąg S1 [] i ciąg S2 [] za pośrednictwem wskaźnika, który może uzyskać dostęp do wartości String S1 [] i String S2 [], aby porównać oba ciągu ze sobą. Ponieważ dwa ciągi są tutaj różne, więc wyjście łańcucha to nierówny ciąg.

Wniosek

W tym temacie bardzo poważnie omówiliśmy wszystkie aspekty wskaźnika ciągów, aby zrozumieć pojęcie wskaźnik ciągów. Jest bardzo zrozumiałe, że za pośrednictwem wskaźnika możemy łatwo uzyskać dostęp do całego indeksu ciągu bardzo szybko i łatwy do uczynienia kodu solidnego.