Karakterwijzers en Functiegebruik in C onder de knie krijgen
Wat is een Karakterwijzer in C?
Een karakterwijzer slaat het adres op van een karaktertype of het adres van het eerste karakter van een karakterarray (string). Karakterwijzers zijn zeer nuttig bij het manipuleren van strings.
Er is geen string-datatype in C. Een array van het type "char" wordt beschouwd als een string. Daarom vertegenwoordigt een wijzer naar een char-type array een string. Deze char-wijzer kan vervolgens als argument aan een functie worden doorgegeven voor het verwerken van de string.
Een Karakterwijzer Declareren
Een karakterwijzer wijst naar een karakter of een karakterarray. Om een karakterwijzer te declareren, gebruik je de volgende syntaxis:
char *wijzer_naam;
Een Karakterwijzer Initialiseren
Na het declareren van een karakterwijzer, moet je deze initialiseren met het adres van een karaktermvariabele. Als er een karakterarray is, kun je de karakterwijzer eenvoudig initialiseren door de naam van de karakterarray op te geven of het adres van het eerste element ervan.
Karakterwijzer van een Karakter
De volgende syntaxis initialiseert een karakterwijzer van een karakertype:
char *wijzer_naam = &char_variabele;
Karakterwijzer van een Karakterarray
De volgende syntaxis initialiseert een karakterwijzer van een karakterarray (string):
char *wijzer_naam = char_array; /*of*/ char *wijzer_naam = &char_array[0];
Voorbeeld van een Karakterwijzer
In het volgende voorbeeld hebben we twee variabelen: een karakter en een karakterarray. We gebruiken twee wijzervariabelen om de adressen van het karakter en de karakterarray op te slaan, en printen vervolgens de waarden van de variabelen met behulp van de karakterwijzers.
#include <stdio.h>
int main() {
// Twee variabelen declareren
char x = 'P';
char arr[] = "TutorialsPoint";
// Karakterwijzers declareren
char *ptr_x = &x;
char *ptr_arr = arr;
// Waarden printen
printf("Waarde van x : %c\n", *ptr_x);
printf("Waarde van arr: %s\n", ptr_arr);
return 0;
}
Uitvoer
Voer de code uit en controleer de uitvoer −
Waarde van x : P Waarde van arr: TutorialsPoint
Karakterwijzers Begrijpen
Een string wordt als een array gedeclareerd als volgt −
char arr[] = "Hallo";
De string is een NULL-getermineerde array van karakters. Het laatste element in de bovenstaande array is een NULL-karakter (\0).
Declareer een wijzer van char-type en wijs deze het adres van het karakter op de 0-positie toe −
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 wijzer in plaats van een arrayvariabele (geen vierkante haakjes).
char *ptr = "Hallo";
Dit zorgt ervoor dat de string in het geheugen wordt opgeslagen en het adres ervan in ptr. We kunnen de string doorlopen door de ptr te incrementeren.
while(*ptr != '\0'){
printf("%c", *ptr);
ptr++;
}
Toegang tot een Karakterarray
Als je een karakterarray print met de %s-formatspecifier, kun je dit doen door de naam van de karakterwijzer te gebruiken. Maar als je elk karakter van de karakterarray wilt benaderen, moet je een asterisk (*) voor de naam van de karakterwijzer plaatsen en deze vervolgens incrementeren.
Voorbeeld
Hier is de volledige programmacode −
#include <stdio.h>
int main(){
char arr[] = "Karakterwijzers en Functies in C";
char *ptr = arr;
while(*ptr != '\0'){
printf("%c", *ptr);
ptr++;
}
}
Uitvoer
Voer de code uit en controleer de uitvoer −
Karakterwijzers en Functies in C
Voorbeeld
Als alternatief kun je ptr doorgeven aan printf() met de %s-formaat om de string af te drukken.
#include <stdio.h>
int main(){
char arr[] = "Karakterwijzers en Functies in C";
char *ptr = arr;
printf("%s", ptr);
}
Uitvoer
Bij het uitvoeren van deze code krijg je dezelfde uitvoer −
Karakterwijzers en Functies in C
Karakterwijzerfuncties
De headerfile "string.h" definieert een aantal bibliotheekfuncties die stringverwerking uitvoeren, zoals het bepalen van de lengte van een string, het kopiëren van een string en het vergelijken van twee strings. Deze functies gebruiken char-wijzerargumenten.
De strlen()-functie
De strlen()-functie retourneert de lengte, d.w.z. het aantal karakters in een string. Het prototype van de strlen()-functie is als volgt −
int strlen(char *)
Voorbeeld 1
De volgende code laat zien hoe je de lengte van een string kunt printen −
#include <stdio.h>
#include <string.h>
int main(){
char *ptr = "Hallo";
printf("Gegeven string: %s \n", ptr);
printf("Lengte van de string: %d", strlen(ptr));
return 0;
}
Wanneer je deze code uitvoert, produceert het de volgende uitvoer −
Gegeven string: Hallo Lengte van de string: 5
Voorbeeld 2
Effectief berekent de strlen()-functie de stringlengte volgens de door de gebruiker gedefinieerde functie str_len() zoals hieronder getoond −
#include <stdio.h>
#include <string.h>
int str_len(char *);
int main(){
char *ptr = "Welkom bij Tutorialspoint";
int lengte = str_len(ptr);
printf("Gegeven string: %s \n", ptr);
printf("Lengte van de string: %d", lengte);
return 0;
}
int str_len(char *ptr){
int i = 0;
while(*ptr != '\0'){
i++;
ptr++;
}
return i;
}
Wanneer je deze code uitvoert, produceert het de volgende uitvoer −
Gegeven string: Welkom bij Tutorialspoint Lengte van de string: 25
De strcpy()-functie
De toewijzingsoperator (=) wordt niet gebruikt om een stringwaarde toe te kennen aan een stringvariabele, d.w.z. een char-wijzer. In plaats daarvan moeten we de strcpy()-functie gebruiken met het volgende prototype −
char * strcpy(char *bestemming, char *bron);
Voorbeeld 1
Het volgende voorbeeld laat zien hoe je de strcpy()-functie kunt gebruiken −
#include <stdio.h>
#include <string.h>
int main(){
char *ptr = "Hoe gaat het?";
char *ptr1;
strcpy(ptr1, ptr);
printf("%s", ptr1);
return 0;
}
De strcpy()-functie retourneert de wijzer naar de bestemmingstring ptr1.
Hoe gaat het?
Voorbeeld 2
Intern implementeert de strcpy()-functie de volgende logica in de door de gebruiker gedefinieerde str_cpy()-functie −
#include <stdio.h>
#include <string.h>
void str_cpy(char *d, char *s);
int main(){
char *ptr = "De strcpy()-functie gebruiken";
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 je deze code uitvoert, produceert het de volgende uitvoer −
De strcpy()-functie gebruiken
De functie kopieert elk karakter van de bronstring naar de bestemming totdat het NULL-karakter "\0" wordt bereikt. Na de lus voegt het een "\0"-karakter toe aan het einde van de bestemmingsarray.
De strcmp()-functie
De gewone vergelijkingsoperatoren (<, >, <=, >=, ==, en !=) mogen niet worden gebruikt voor het vergelijken van twee strings. In plaats daarvan moeten we de strcmp()-functie uit de "string.h"-headerfile gebruiken. Het prototype van deze functie is als volgt −
int strcmp(char *str1, char *str2)
De strcmp()-functie heeft drie mogelijke retourwaarden −
- Wanneer beide strings identiek zijn, retourneert het "0".
- Wanneer het eerste niet-overeenkomende karakter in str1 een grotere ASCII-waarde heeft dan het overeenkomstige karakter in str2, retourneert de functie een positief geheel getal. Dit impliceert dat str1 na str2 komt in alfabetische volgorde, zoals in een woordenboek.
- Wanneer het eerste niet-overeenkomende karakter in str1 een kleinere ASCII-waarde heeft dan het overeenkomstige karakter in str2, retourneert de functie een negatief geheel getal. Dit impliceert dat str1 voor str2 komt in alfabetische volgorde, zoals in een woordenboek.
Voorbeeld 1
Het volgende voorbeeld demonstreert hoe je de strcmp()-functie in een C-programma kunt gebruiken −
#include <stdio.h>
#include <string.h>
int main(){
char *s1 = "BASK";
char *s2 = "BALL";
int ret = strcmp(s1, s2);
if (ret == 0)
printf("Beide strings zijn identiek\n");
else if (ret > 0)
printf("De eerste string komt na de tweede string \n");
else
printf("De eerste string komt voor de tweede string \n");
return 0;
}
Voer de code uit en controleer de uitvoer −
De eerste string komt na de tweede string
Wijzig s1 in BACK en voer de code opnieuw uit. Nu krijg je de volgende uitvoer −
De eerste string komt voor de tweede string
Voorbeeld 2
Je kunt een vergelijkbaar resultaat verkrijgen met de door de gebruiker gedefinieerde functie str_cmp(), zoals getoond in de volgende code −
#include <stdio.h>
#include <string.h>
int str_cmp(char *str1, char *str2);
int main(){
char *s1 = "De Beste C Programmeertutorial Beschikbaar Online";
char *s2 = "De Beste C Programmeertutorial Beschikbaar Online";
int ret = str_cmp(s1, s2);
if (ret == 0)
printf("Beide strings zijn identiek\n");
else if (ret > 0)
printf("De eerste string komt na de tweede string\n");
else
printf("De eerste string komt voor de tweede string\n");
return 0;
}
int str_cmp(char *str1, char *str2) {
while (*str1 != '\0' && *str2 != '\0') {
if (*str1 != *str2) {
return *str1 - *str2;
}
str1++;
str2++;
}
// Als beide strings gelijk zijn, retourneer 0
return 0;
}
Wanneer je deze code uitvoert, produceert het de volgende uitvoer −
Beide strings zijn identiek
De str_cmp()-functie vergelijkt de karakters op dezelfde index in een string totdat de karakters in één van de strings op zijn of de karakters gelijk zijn.
Op het moment dat ongelijke karakters op dezelfde index worden gedetecteerd, wordt het verschil in hun ASCII-waarden geretourneerd. Het retourneert "0" wanneer de lus wordt beëindigd.
C Taal
- C++ Data Type Modifiers Begrijpen: signed, unsigned, long, short
- C++ Operator Overloading meesteren: Praktische voorbeelden & best practices
- C++ for loops: stap-voor-stap gids
- C++ constructors: default, parameterized en copy constructors uitgelegd
- C# Expressies, Statements & Blokken: Uitgebreide Gids met Praktische Voorbeelden
- C++ Struct vs Class: Belangrijkste Verschillen, Syntaxis en Beste Gebruikssituaties
- C++ Interfaces: Abstracte Klassen & Pure Virtual Functions Beheersen
- C Programmeeroperatoren Beheersen: Een Uitgebreide Gids
- C Variabelen, Datatypes en Constanten – Een Praktische Gids
- Top 50 C# Interviewvragen & Antwoorden (2021 Editie) – Voor Beginners en Ervaren Ontwikkelaars
- C++ Hello World‑handleiding: Stap‑voor‑stap code, setup & uitleg