Квалификатор указателя restrict: Назначение? Когда применять? - C (СИ)
Формулировка задачи:
Сделал поиск по форуму в разделе C/C++ по слову restrict - нашёл информацию крайне скудную. Нашёл только пост от Evg http://www.cyberforum.ru/cpp/thread283485.html#post1592152, но оттуда как-то не очень понятна общая картина.
Из вики почерпнул данную информацию
Вопросы: получается,что слово restrict имеет смысл только в паре с другим параметром и только в параметрах функции?
Какой у него точный смысл (назначение), и как и когда его использовать?
#include <string.h> void *memcpy(void * restrict s1, /* копируемые области не должны пересекаться */ const void * restrict s2, size_t n); void *memmove(void *s1, /* копируемые области могут пересекаться */ const void *s2, size_t n);
Решение задачи: «Квалификатор указателя restrict: Назначение? Когда применять?»
textual
Листинг программы
void func1 (int * restrict p1, int * restrict p2, int n) { for (i = 0; i < n; i++) { p1[i] = ...; ... = p2[i]; } } void func2 (void) { int a[10][20]; func1 (a[2], a[3], 20); }
Объяснение кода листинга программы
- В функции
func1
объявлены три параметра:p1
,p2
,n
. - Параметр
p1
имеет атрибутrestrict
, что означает, что он указывает на переменную, которая не может быть изменена внутри цикла. - Параметр
p2
также имеет атрибутrestrict
. - В цикле
for
происходит два действия:- Значение
p1[i]
присваивается переменной, имя которой не указано в вашем запросе. - Значение
p2[i]
присваивается переменной, имя которой также не указано в вашем запросе.
- Значение
- В функции
func2
объявлена массивная переменнаяa
размером 10x20. - В цикле
for
происходит два действия:- Переменные
p1
иp2
указывают на разные строки массиваa
. - Индексы строк массива
a
выбираются так, чтобы они были в пределах допустимого диапазона для индексации массива.
- Переменные
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д