|
|
|
Помогите разобраться с указателями!!!
|
|||
|---|---|---|---|
|
#18+
Нард! Помогите! Протупил! Мне надо сегодня отослать контрольную, а я думал на след. неделе! Я все сделал, только не могу разобраться с указателями! Помогите хоть что-то сделать!! 2.1. Каким образом инициализируются по умолчанию внешние и статические массивы? Инициализируются ли по умолчанию автоматические массивы? Каким образом можно присваивать значения элементам массива, относящегося к любому классу памяти? 2.2. Пусть задан массив int arr[10]; что тогда означают выражения: arr[0] *arr *arr + 2 arr[2] *(arr + 2) arr &arr[2] arr+2 2.3. Правильно ли написано увеличение величины, на которую указывает указатель a, на единицу? *a++; 2.4. Дан фрагмент текста: char a[] = "xyz"; char *b = a + 1; Чему равны b[-1] b[2] "abcd"[3] Можно ли написать a++ ? То же про b++ ? Можно ли написать b=a ? a=b ? 2.5. Перепишите указанную программу с применением указателей. 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 ; printf ("Среднее значение = %ld\n", sum/8) } 2.6. Что напечатается в результате работы программы? char arr[] = {'С', 'Л', 'А', 'В', 'А'}; main () { char *pt; int i; pt = arr + sizeof(arr) - 1; for( i = 0; i < 5; i++, pt-- ) printf("%c %c\n", arr , *pt); } Почему массив arr[] описан вне функции main()? Как внести его в функцию main() ? 2.7. Для имеющегося массива static int mas[30][100]; a. выразите адрес mas[22][56] иначе b. выразите адрес mas[22][0] двумя способами c. выразите адрес mas[0][0] тремя способами 2.8. Составьте программу инициализации двумерного массива a[10][10], выборки элементов с a[5][5] до a[9][9] и их распечатки. Используйте доступ к элементам по указателю. 2.9. Составьте функцию вычисления скалярного произведения двух векторов. Длина векторов задается в качестве одного из аргументов. 2.10. Составьте функцию умножения двумерных матриц a[][] * b[][]. 2.11. Составьте функцию умножения трехмерных матриц a[][][] * b[][][]. 2.17. Массив s моделирует двумерный массив char s[H][W]; Перепишите пример при помощи указателей, избавьтесь от операции умножения. Прямоугольник (x0,y0,width,height) лежит целиком внутри (0,0,W,H). char s[W*H]; int x,y; int x0,y0,width,height; for(x=0; x < W*H; x++) s[x] = '.'; ... for(y=y0; y < y0+height; y++) for(x=x0; x < x0+width; x++) s[x + W*y] = '*'; 2.18. Что означают описания? int i; int *pi; int *api[3]; int (*pai)[3]; int fi(); int *fpi(); int (*pfi)(); int *(*pfpi)(); int (*pfpfi())(); int (*fai())[3]; int (*apfi[3])(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2006, 13:52 |
|
||
|
Помогите разобраться с указателями!!!
|
|||
|---|---|---|---|
|
#18+
По-моему это все хорошо описано в книжках Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2006, 14:33 |
|
||
|
Помогите разобраться с указателями!!!
|
|||
|---|---|---|---|
|
#18+
в книжках читать надо... первое разберись что в масиве есть указатель(указывает на переменную, сам является адресом) а что переменная, как к ним обращатся... смотри разименовывание указателя *с ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2006, 14:42 |
|
||
|
Помогите разобраться с указателями!!!
|
|||
|---|---|---|---|
|
#18+
Да нифига не понимаю в книжках((( Во всем разобрался, а указатели - хоть убей!!!! Ну подскажите хоть 2.3. Правильно ли написано увеличение величины, на которую указывает указатель a, на единицу? *a++; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2006, 15:13 |
|
||
|
Помогите разобраться с указателями!!!
|
|||
|---|---|---|---|
|
#18+
автор*a++; Результатом будет значение расположенное по текущему адресу указателя, а сам указатель затем будет указывать на следующий элемент ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2006, 17:53 |
|
||
|
Помогите разобраться с указателями!!!
|
|||
|---|---|---|---|
|
#18+
Все абсолютно верно (имеется в виду Funikov). #include <conio.h> #include <stdio.h> void main (void) { int *a,b,c; //объявили, что a-указатель на целое число; b и c –целые числа //какой конкретно адрес находится в a решает транслятор //нам его знать совсем не обязательно *a=13; // в ячейку памяти, адрес которой находится в a, записываем число 13 b=*a; // b равно содержимому ячейки, адрес которой содержится в a *a=*a+1; // увеличиваем содержимое ячейки, на которую указывает a, на единицу c=*a; //c равно этому новому увеличенному значению printf("%d %d\n\n",b,c);//распечатываем до и после } Можно и естественно спросить зачем нужны такие навороты, в смысле указатели. Ответ: они просто создают удобства при работе с массивами и в других случаях. int i; // i объявлено целым числом int *pi; // pi объявлено указателем на целое число; в pi будет храниться адрес int *api[3]; // объявлен массив указателей на числа целые ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2006, 19:41 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33498291&tid=2032086]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
141ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 248ms |
| total: | 505ms |

| 0 / 0 |
