Хрестоматия по программированию на Си в Unix


Массивы, строки, указатели. Хрестоматия по программированию на Си в Unix - стр. 7


if(c) a = 1; else b = 1;

Предупреждение: такой стиль не способствует понятности программы и даже компактности ее кода.

#include <stdio.h>

int main(int ac, char *av[]){ int a, b, c; a = b = c = 0; if(av[1]) c = atoi(av[1]); *(c ? &a : &b) = 1; /* !!! */ printf("cond=%d a=%d b=%d\n", c, a, b); return 0; }

Каким образом инициализируются по умолчанию внешние и статические массивы? Инициализируются ли по умолчанию автоматические массивы? Каким образом можно присваивать значения элементам массива, относящегося к любому классу памяти?

Пусть задан массив int arr[10]; что тогда означают выражения:

arr[0] *arr *arr + 2 arr[2] *(arr + 2) arr &arr[2] arr+2

Правильно ли написано увеличение величины, на которую указывает указатель a, на единицу?

*a++;

Ответ: нет, надо:

(*a)++; или *a += 1;

Дан фрагмент текста:

char a[] = "xyz"; char *b = a + 1;

Чему равны

b[-1] b[2] "abcd"[3]

(Ответ: 'x', '\0', 'd' )

Можно ли написать a++ ? То же про b++ ? Можно ли написать b=a ? a=b ? (нет, да, да, нет)

Ниже приведена программа, вычисляющая среднее значение элементов массива

int arr [] = {1, 7, 4, 45, 31, 20, 57, 11}; main () { int i; long sum; for ( i = 0, sum = 0L; i < (sizeof(arr)/sizeof(int)); i++ ) sum += arr[i]; printf ("Среднее значение = %ld\n", sum/8) }

Перепишите указанную программу с применением указателей.

Что напечатается в результате работы программы?

char arr[] = {'С', 'Л', 'А', 'В', 'А'}; main () { char *pt; int i; pt = arr + sizeof(arr) - 1; for( i = 0; i < 5; i++, pt-- ) printf("%c %c\n", arr[i], *pt); }

Почему массив arr[] описан вне функции main()? Как внести его в функцию main() ?

Ответ: написать внутри main

static char arr[]=...

Можно ли писать на Си так:

f( n, m ){ int x[n]; int y[n*2]; int z[n * m]; ... }

Ответ: к сожалению нельзя (Си - это не Algol). При отведении памяти для массива в качестве размера должна быть указана константа или выражение, которое может быть еще во время компиляции вычислено до целочисленной константы, т.е. массивы имеют фиксированную длину.




- Начало -  - Назад -  - Вперед -



Книжный магазин