Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- void foo(int *p);
- ////////////////////////////////////////////
- int main()
- {
- int nArr[10] = { 2, 0, 4, 77};
- int nAr [10] = {12, 10, 34, 71117};
- foo(nArr);
- foo(nAr );
- }
- ////////////////////////////////////////////
- void foo(int *p)
- {
- for(int i = 0; i < 10; i++)
- {
- printf("%d, ", p[i]);
- }
- printf(" \n");
- }
- /*
- #include <stdio.h>
- void foo(int*);
- ////////////////////////////////////////////
- int main()
- {
- int nArr[10] = {2, 0, 4, 77};
- foo(&nArr[0]);
- }
- ////////////////////////////////////////////
- void foo(int *p)
- {
- for(int i = 0; i < 10; i++)
- {
- printf(" = %d\n", p[i]);
- }
- }
- */
- /*
- #include <stdio.h>
- ////////////////////////////////////////////
- int main()
- {
- int n3 = 87;
- int *p;
- printf("address of n3 = %d\n", &n3);
- p = &n3;
- printf(" p = %d\n", p);
- printf("*p = %d\n", *p);
- }
- */
- /*
- #include <stdio.h>
- ////////////////////////////////////////////
- int main()
- {
- __int8 n = 123;
- __int32 n2 = 4444;
- int n3 ;
- printf("size of n2 = %d\n", sizeof(int) );
- }
- */
- /*
- #include <stdio.h>
- //////////////////////////////////////////// printf("++++ cn = %d \n", cn);
- int main()
- {
- unsigned __int8 cn = 'S';
- int i = 1;
- L_01: printf("cn = %c = %d\n", cn, cn);
- cn ++;
- i ++;
- if( i < 12 ) goto L_01;
- }
- */
- /*
- #include <stdio.h>
- //////////////////////////////////////////// printf("++++ cn = %d \n", cn);
- int main()
- {
- unsigned __int8 cn = 250;
- int i = 1;
- L_01: printf("cn = %4d \n", cn);
- cn ++;
- i ++;
- if( i < 12 ) goto L_01;
- }
- */
- /* Задание:
- 1) Создайте переменную char cn = 123;
- 2) В цикле печатайте её содержимое (как число %d) и каждый раз увеличивайте на 1
- 3) На какой по счёту итерации цикла значение переменной cn резко изменит своё значение? И почему?
- */
- /*
- #include <stdio.h>
- ////////////////////////////////////////////
- int main()
- {
- char cn = 123;
- int i = 1;
- L_01: printf("cn = %d \n", cn);
- cn ++;
- i ++;
- if( i < 12 ) goto L_01;
- }
- */
- /*
- #include <stdio.h>
- ////////////////////////////////////////////
- int main()
- {
- char cn = 123;
- int i = 1;
- L_01: printf("cn = %d \n", cn);
- cn ++;
- i ++;
- if( cn == -120 ) goto L_02;
- else goto L_01;
- L_02: return 0;
- }
- */
- /* ответ на вопрос:return 0;
- уже на пятом цикле значение переменной резко принимает отрицательное значение.
- хотя программа ПРИБАВЛЯЕТ единицу и больше ничего. Цифры идут по убыванию (более подробно можно рассмотреть если
- поменять условие i < n, где n число принимающее любое значение)
- собственно, вся фишка в том, что тиип char обычно занимает 1 байт (8 бит), что позволяет хранить числа от -128 до 127
- (прочла в интернете). Вот и вся магия
- когда мы выходим за пределы значения то компилятор просто прогоняет это число обратно, начиная с меньшего -128
- и прибавляя к нему единицу до следующего числа 127. и так покругу :)
- скорее всего в этом и причина
- но почему это происходит именно в формате %d - я без понятия.
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement