Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

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

  1. C++ Meerdere, meerdere niveaus en hiërarchische overerving
  2. Opslagklassen in C++
  3. C# ArrayList-zelfstudie met voorbeelden
  4. C# statisch trefwoord
  5. Gegevensabstractie in C++
  6. C++ Functie Overbelasting
  7. C# verzegelde klasse en methode
  8. C#-structuur
  9. C++ Datum en tijd
  10. C# versus C++:wat is het verschil tussen C# en C++?
  11. C++ Dynamische toewijzing van arrays met voorbeeld