Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Освоение указателей символов и использования функций в C

Что такое указатель символа в C?

Указатель на символ хранит адрес символьного типа или адрес первого символа символьного массива (строки). Указатели на символы очень полезны при работе со строками.

В C нет строкового типа данных. Массив типа «char» рассматривается как строка. Следовательно, указатель массива типа char представляет строку. Этот указатель на символ затем можно передать в качестве аргумента функции для обработки строки.

Объявление указателя символа

Указатель символа указывает на символ или массив символов. Таким образом, чтобы объявить указатель на символ, используйте следующий синтаксис:

char *pointer_name;

Инициализация указателя символов

После объявления указателя на символ вам необходимо инициализировать его адресом символьной переменной. Если имеется массив символов, вы можете просто инициализировать указатель символа, указав имя массива символов или адрес первых его элементов.

Указатель персонажа

Ниже приведен синтаксис для инициализации указателя символа символьного типа:

char *pointer_name = &char_variable;

Указатель символа массива символов

Ниже приведен синтаксис для инициализации указателя символа массива символов (строки):

char *pointer_name = char_array;
/*or*/
char *pointer_name = &char_array[0];

Пример символьного указателя

В следующем примере у нас есть две переменные:символ и массив символов. Мы берем две переменные-указатели для хранения адресов символа и массива символов, а затем печатаем значения переменных, используя указатели на символы.

#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;
}

Вывод

Запустите код и проверьте его вывод –

Value of x : P
Value of arr: TutorialsPoint

Понимание указателя символов

Строка объявляется как массив следующим образом:

char arr[] = "Hello";

Строка представляет собой массив символов, завершающийся NULL. Последний элемент в приведенном выше массиве представляет собой NULL-символ (\0).

Объявите указатель типа char и присвойте ему адрес символа в 0-й позиции —

char *ptr = &arr[0];

Помните, что имя самого массива — это адрес нулевого элемента.

char *ptr = arr;

Строку можно объявить с использованием указателя вместо переменной массива (без квадратных скобок).

char *ptr = "Hello";

Это приводит к тому, что строка сохраняется в памяти, а ее адрес сохраняется в ptr. Мы можем перемещаться по строке, увеличивая ptr.

while(*ptr != '\0'){
 printf("%c", *ptr);
 ptr++;
}

Доступ к массиву символов

Если вы печатаете массив символов с помощью спецификатора формата %s, вы можете сделать это, используя имя указателя символов. Но если вы хотите получить доступ к каждому символу массива символов, вам необходимо использовать звездочку (*) перед именем указателя символа, а затем увеличивать его.

Пример

Вот полный код программы –

#include <stdio.h>
int main(){
 char arr[] = "Character Pointers and Functions in C";
 char *ptr = arr;
 while(*ptr != '\0'){
 printf("%c", *ptr);
 ptr++;
 }
}

Вывод

Запустите код и проверьте его вывод –

Character Pointers and Functions in C

Пример

Альтернативно, передайте ptr в printf() в формате %s, чтобы напечатать строку.

#include <stdio.h>
int main(){
 char arr[] = "Character Pointers and Functions in C";
 char *ptr = arr;
 printf("%s", ptr);
}

Вывод

Запустив этот код, вы получите тот же результат –

Character Pointers and Functions in C

Функции указателя символов

Заголовочные файлы «string.h» определяют ряд библиотечных функций, которые выполняют обработку строк, например определение длины строки, копирование строки и сравнение двух строк. Эти функции используют аргументы указателя типа char.

Функция strlen()

Функция strlen() возвращает длину, то есть количество символов в строке. Прототип функции strlen() следующий:

int strlen(char *)

Пример 1

Следующий код показывает, как можно распечатать длину строки –

#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;
}

Когда вы запустите этот код, он выдаст следующий результат –

Given string: Hello 
Length of the string: 5

Пример 2

По сути, функция strlen() вычисляет длину строки в соответствии с определяемой пользователем функцией str_len(), как показано ниже –

#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;
}

Когда вы запустите этот код, он выдаст следующий результат –

Given string: Welcome to Tutorialspoint 
Length of the string: 25

Функция strcpy()

Оператор присваивания ( =) не используется для присвоения строкового значения строковой переменной, то есть указателю char. Вместо этого нам нужно использовать функцию strcpy() со следующим прототипом –

char * strcpy(char * dest, char * source);

Пример 1

В следующем примере показано, как можно использовать функцию strcpy() –

#include <stdio.h>
#include <string.h>
int main(){
 char *ptr = "How are you doing?";
 char *ptr1;
 strcpy(ptr1, ptr);
 printf("%s", ptr1);
 return 0;
}

Функция strcpy() возвращает указатель на строку назначения ptr1.

How are you doing?

Пример 2

Внутри функция strcpy() реализует следующую логику в определяемой пользователем функции 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';
}

Когда вы запустите его код, он выдаст следующий результат –

Using the strcpy() Function

Функция копирует каждый символ из исходной строки в место назначения до тех пор, пока не будет достигнут NULL-символ «\0». После цикла он добавляет символ «\0» в конец целевого массива.

Функция strcmp()

Обычные операторы сравнения (<,>, <=,>=, ==и !=) нельзя использовать для сравнения двух строк. Вместо этого нам нужно использовать функцию strcmp() из заголовочного файла «string.h». Прототип этой функции следующий:

int strcmp(char *str1, char *str2)

Функция strcmp() имеет три возможных возвращаемых значения –

Пример 1

В следующем примере показано, как можно использовать функцию strcmp() в программе C –

#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;
}

Запустите код и проверьте его вывод –

The first string appears after the second string

Измените s1 на BACK и запустите код еще раз. Теперь вы получите следующий результат –

The first string appears before the second string

Пример 2

Вы можете получить аналогичный результат, используя пользовательскую функцию str_cmp(), как показано в следующем коде –

#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;
}

Когда вы запустите этот код, он выдаст следующий результат –

Both strings are identical

Функция str_cmp() сравнивает символы в строке с одним и тем же индексом до тех пор, пока символы в любой строке не исчерпаются или символы не станут равными.

В момент обнаружения неравных символов по одному и тому же индексу возвращается разница в их значениях ASCII. Он возвращает «0» при завершении цикла.


Язык C

  1. C — аргументы командной строки
  2. Многопоточность С++
  3. Операторы С#
  4. С# — События
  5. C - Настройка среды
  6. С# — Операторы
  7. С# — Делегаты
  8. С# цикл foreach
  9. C Препроцессор и макросы
  10. Метод С#