Karakteraanwijzers en functiegebruik beheersen in C
Wat is een karakteraanwijzer in C?
Een karakteraanwijzer slaat het adres op van een tekentype of het adres van het eerste teken van een tekenarray (string). Karakteraanwijzers zijn erg handig als u de tekenreeksen manipuleert.
Er is geen string-gegevenstype in C. Een array van het type "char" wordt beschouwd als een string. Daarom vertegenwoordigt een pointer van een array van het char-type een string. Deze char-pointer kan vervolgens als argument worden doorgegeven aan een functie voor het verwerken van de string.
Een karakteraanwijzer declareren
Een karakteraanwijzer verwijst naar een karakter of een karakterarray. Om een karakteraanwijzer te declareren, gebruikt u dus de volgende syntaxis:
char *pointer_name;
Een tekenaanwijzer initialiseren
Nadat u een karakteraanwijzer heeft gedeclareerd, moet u deze initialiseren met het adres van een karaktervariabele. Als er een karakterarray is, kunt u eenvoudig de karakteraanwijzer initialiseren door de naam van de karakterarray of het adres van de eerste elementen ervan op te geven.
Karakteraanwijzer van karakter
Het volgende is de syntaxis voor het initialiseren van een tekenaanwijzer van een tekentype:
char *pointer_name = &char_variable;
Karakteraanwijzer van tekenarray
Het volgende is de syntaxis voor het initialiseren van een karakteraanwijzer van een karakterarray (string):
char *pointer_name = char_array; /*or*/ char *pointer_name = &char_array[0];
Voorbeeld van tekenaanwijzer
In het volgende voorbeeld hebben we twee variabelen karakter en karakterarray. We gebruiken twee pointervariabelen om de adressen van het karakter en de karakterarray op te slaan, en drukken vervolgens de waarden van de variabelen af met behulp van de karakterpointers.
#include <stdio.h>
int main() {
// Declare two variables
char x = 'P';
char arr[] = "TutorialsPoint";
// Declaring character pointers
char *ptr_x = &x;
char *ptr_arr = arr;
// Printing values
printf("Value of x : %c\n", *ptr_x);
printf("Value of arr: %s\n", ptr_arr);
return 0;
}
Uitvoer
Voer de code uit en controleer de uitvoer −
Value of x : P Value of arr: TutorialsPoint
De karakteraanwijzer begrijpen
Een string wordt als volgt gedeclareerd als array −
char arr[] = "Hello";
De tekenreeks is een NULL-beëindigde reeks tekens. Het laatste element in de bovenstaande array is een NULL-teken (\0).
Declareer een pointer van het char-type en wijs deze het adres toe van het karakter op de 0e positie −
char *ptr = &arr[0];
Onthoud dat de naam van de array zelf het adres is van het 0e element.
char *ptr = arr;
Een string kan worden gedeclareerd met behulp van een pointer in plaats van een arrayvariabele (geen vierkante haakjes).
char *ptr = "Hello";
Dit zorgt ervoor dat de string in het geheugen wordt opgeslagen en dat het adres ervan in ptr wordt opgeslagen. We kunnen de string doorlopen door de ptr.
te verhogen
while(*ptr != '\0'){
printf("%c", *ptr);
ptr++;
}
Toegang tot tekenarray
Als u een karakterarray afdrukt met behulp van de %s-formaatspecificatie, kunt u dit doen door de naam van de karakteraanwijzer te gebruiken. Maar als u toegang wilt krijgen tot elk teken van de tekenarray, moet u een asterisk (*) vóór de naam van de tekenaanwijzer plaatsen en deze vervolgens verhogen.
Voorbeeld
Hier is de volledige programmacode −
#include <stdio.h>
int main(){
char arr[] = "Character Pointers and Functions in C";
char *ptr = arr;
while(*ptr != '\0'){
printf("%c", *ptr);
ptr++;
}
}
Uitvoer
Voer de code uit en controleer de uitvoer −
Character Pointers and Functions in C
Voorbeeld
U kunt ook ptr doorgeven aan printf() met het %s-formaat om de tekenreeks af te drukken.
#include <stdio.h>
int main(){
char arr[] = "Character Pointers and Functions in C";
char *ptr = arr;
printf("%s", ptr);
}
Uitvoer
Als u deze code uitvoert, krijgt u dezelfde uitvoer −
Character Pointers and Functions in C
Character Pointer-functies
De headerbestanden "string.h" definiëren een aantal bibliotheekfuncties die stringverwerking uitvoeren, zoals het vinden van de lengte van een string, het kopiëren van een string en het vergelijken van twee strings. Deze functies gebruiken char pointer-argumenten.
De strlen()-functie
De functie strlen() retourneert de lengte, d.w.z. het aantal tekens in een string. Het prototype van de functie strlen() is als volgt −
int strlen(char *)
Voorbeeld 1
De volgende code laat zien hoe u de lengte van een string kunt afdrukken −
#include <stdio.h>
#include <string.h>
int main(){
char *ptr = "Hello";
printf("Given string: %s \n", ptr);
printf("Length of the string: %d", strlen(ptr));
return 0;
}
Wanneer u deze code uitvoert, zal deze de volgende uitvoer produceren −
Given string: Hello Length of the string: 5
Voorbeeld 2
In feite berekent de functie strlen() de tekenreekslengte volgens de door de gebruiker gedefinieerde functie str_len() zoals hieronder weergegeven −
#include <stdio.h>
#include <string.h>
int str_len(char *);
int main(){
char *ptr = "Welcome to Tutorialspoint";
int length = str_len(ptr);
printf("Given string: %s \n", ptr);
printf("Length of the string: %d", length);
return 0;
}
int str_len(char *ptr){
int i = 0;
while(*ptr != '\0'){
i++;
ptr++;
}
return i;
}
Wanneer u deze code uitvoert, zal deze de volgende uitvoer produceren −
Given string: Welcome to Tutorialspoint Length of the string: 25
De strcpy()-functie
De toewijzingsoperator ( =) wordt niet gebruikt om een stringwaarde toe te wijzen aan een stringvariabele, dat wil zeggen een char-pointer. In plaats daarvan moeten we de functie strcpy() gebruiken met het volgende prototype −
char * strcpy(char * dest, char * source);
Voorbeeld 1
Het volgende voorbeeld laat zien hoe u de strcpy() functie −
kunt gebruiken
#include <stdio.h>
#include <string.h>
int main(){
char *ptr = "How are you doing?";
char *ptr1;
strcpy(ptr1, ptr);
printf("%s", ptr1);
return 0;
}
De functie strcpy() retourneert de aanwijzer naar de doeltekenreeks ptr1.
How are you doing?
Voorbeeld 2
Intern implementeert de functie strcpy() de volgende logica in de door de gebruiker gedefinieerde functie str_cpy() −
#include <stdio.h>
#include <string.h>
void str_cpy(char *d, char *s);
int main(){
char *ptr = "Using the strcpy() Function";
char *ptr1;
str_cpy(ptr1, ptr);
printf("%s", ptr1);
return 0;
}
void str_cpy(char *d, char *s){
int i;
for(i = 0; s[i] != '\0'; i++)
d[i] = s[i];
d[i] = '\0';
}
Wanneer u zijn code uitvoert, zal deze de volgende uitvoer produceren −
Using the strcpy() Function
De functie kopieert elk teken van de bronreeks naar de bestemming totdat het NULL-teken "\0" is bereikt. Na de lus wordt een teken "\0" toegevoegd aan het einde van de doelarray.
De strcmp()-functie
De gebruikelijke vergelijkingsoperatoren (<,>, <=,>=, ==en !=) mogen niet worden gebruikt voor het vergelijken van twee strings. In plaats daarvan moeten we de strcmp()-functie uit het headerbestand "string.h" gebruiken. Het prototype van deze functie is als volgt −
int strcmp(char *str1, char *str2)
De functie strcmp() heeft drie mogelijke retourwaarden −
- Als beide strings identiek blijken te zijn, retourneert het "0".
- Als het eerste niet-overeenkomende teken in str1 een grotere ASCII-waarde heeft dan het overeenkomstige teken in str2, retourneert de functie een positief geheel getal. Het impliceert dat str1 in alfabetische volgorde na str2 verschijnt, zoals in een woordenboek.
- Als het eerste niet-overeenkomende teken in str1 een lagere ASCII-waarde heeft dan het overeenkomstige teken in str2, retourneert de functie een negatief geheel getal. Het impliceert dat str1 in alfabetische volgorde vóór str2 verschijnt, zoals in een woordenboek.
Voorbeeld 1
Het volgende voorbeeld laat zien hoe u de functie strcmp() kunt gebruiken in een C-programma −
#include <stdio.h>
#include <string.h>
int main(){
char *s1 = "BASK";
char *s2 = "BALL";
int ret = strcmp(s1, s2);
if (ret == 0)
printf("Both strings are identical\n");
else if (ret > 0)
printf("The first string appears after the second string \n");
else
printf("The first string appears before the second string \n");
return 0;
}
Voer de code uit en controleer de uitvoer −
The first string appears after the second string
Wijzig s1 in BACK en voer de code opnieuw uit. Nu krijg je de volgende uitvoer −
The first string appears before the second string
Voorbeeld 2
U kunt een soortgelijk resultaat verkrijgen met behulp van de door de gebruiker gedefinieerde functie str_cmp(), zoals weergegeven in de volgende code −
#include <stdio.h>
#include <string.h>
int str_cmp(char *str1, char *str2);
int main(){
char *s1 = "The Best C Programming Tutorial Available Online";
char *s2 = "The Best C Programming Tutorial Available Online";
int ret = str_cmp(s1, s2);
if (ret == 0)
printf("Both strings are identical\n");
else if (ret > 0)
printf("The first string appears after the second string\n");
else
printf("The first string appears before the second string\n");
return 0;
}
int str_cmp(char *str1, char *str2) {
while (*str1 != '\0' && *str2 != '\0') {
if (*str1 != *str2) {
return *str1 - *str2;
}
str1++;
str2++;
}
// If both strings are equal, return 0
return 0;
}
Wanneer u deze code uitvoert, zal deze de volgende uitvoer produceren −
Both strings are identical
De functie str_cmp() vergelijkt de karakters op dezelfde index in een string totdat de karakters in een van beide strings uitgeput zijn of de karakters gelijk zijn.
Op het moment dat ongelijke tekens in dezelfde index worden gedetecteerd, wordt het verschil in hun ASCII-waarden geretourneerd. Het retourneert "0" wanneer de lus wordt beëindigd.
C Taal
- C++ Meerdere, meerdere niveaus en hiërarchische overerving
- Opslagklassen in C++
- C# ArrayList-zelfstudie met voorbeelden
- C# statisch trefwoord
- Gegevensabstractie in C++
- C++ Functie Overbelasting
- C# verzegelde klasse en methode
- C#-structuur
- C++ Datum en tijd
- C# versus C++:wat is het verschil tussen C# en C++?
- C++ Dynamische toewijzing van arrays met voorbeeld