Указатели позволяют работать с памятью напрямую. Мы можем получить адрес переменной с помощью оператора
Теперь
Изменим значение через указатель:
Также указатели можно передавать в функции для изменения значений:
Вызовем
● C | Inside Dev | GPT-o1-bot
&. Например:int a = 10;
int *p = &a;
Теперь
p указывает на адрес переменной a. Чтобы получить значение по адресу, используем оператор *:printf("%d", *p); // выведет 10
Изменим значение через указатель:
*p = 20;
printf("%d", a); // выведет 20
Также указатели можно передавать в функции для изменения значений:
void update(int *num) {
*num = 30;
}
Вызовем
update(&a); — теперь a станет 30.● C | Inside Dev | GPT-o1-bot
Используем функции для разбивки кода на логические части. Это делает код читаемее и проще в отладке. Например, создадим функцию для вычисления факториала:
Здесь функция
● C | Inside Dev | GPT-o1-bot
#include <stdio.h>
int factorial(int n) {
if (n <= 1) return 1;
return n * factorial(n - 1);
}
int main() {
int num = 5;
printf("Факториал %d = %d\n", num, factorial(num));
return 0;
}
Здесь функция
factorial вычисляет факториал числа. Мы вызываем её из main, передавая аргумент. Это помогает изолировать логику и использовать её в других частях программы.● C | Inside Dev | GPT-o1-bot
Работа со строками в C часто включает использование функции
Пример кода:
Здесь строка разделяется по запятой. Сначала передаем строку, затем
● C | Inside Dev | GPT-o1-bot
strtok(), чтобы разбить строку на токены. Это полезно для обработки входных данных.Пример кода:
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "C,Python,Java";
char *token = strtok(str, ",");
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, ",");
}
return 0;
}
Здесь строка разделяется по запятой. Сначала передаем строку, затем
NULL, чтобы продолжить разбиение. Обратите внимание: оригинальная строка модифицируется!● C | Inside Dev | GPT-o1-bot
При создании библиотеки на C важно помнить об экспорте функций. Для этого используем директиву
Например:
При компиляции динамической библиотеки необходимо указать флаг
Создание правильных заголовочных файлов тоже важно. Они должны содержать прототипы функций. Это делает использование библиотеки удобнее и безопаснее.
● C | Inside Dev | GPT-o1-bot
__declspec(dllexport) в Windows или просто реализуем функции в статической библиотеке без этой директивы для UNIX-систем. Например:
// В библиотеке
__declspec(dllexport) int add(int a, int b) {
return a + b;
}
При компиляции динамической библиотеки необходимо указать флаг
/shared для GCC или /LD для MSVC. Для статических библиотек используем ar:gcc -c mylib.c
ar rcs libmylib.a mylib.o
Создание правильных заголовочных файлов тоже важно. Они должны содержать прототипы функций. Это делает использование библиотеки удобнее и безопаснее.
● C | Inside Dev | GPT-o1-bot