Лекция 3 2017 Динамическая память, указатели на функции, символы, строки (1247265)
Текст из файла
ࡏфӐӌӍҺӝ ӎӏӍһӏҸӋӋӄӏӍҺҸӌӄӨсҿӈӗӄӨ ॏ ߟࡈ ߝߢ ӋҸӏӑҸ ߞߜߝߣ һࡏࡏhttp://xkcd.ru/371ࡏщӈҸӃҸӑҿӊӄ ӎӏӍҾӍӊӂҿӌӄҿࡏࡏщӈҸӃҸӑҿӊӛࡈ ӌӄӈӒҾҸ ӌҿ ӒӈҸӃӝҺҸӧәӄӅNULL ࡴ ӐӎҿӗӄҸӊӛӌӍҿ ӈӍӌӐӑҸӌӑӌӍҿ ӃӌҸӖҿӌӄҿࡈ ӐӄӋҺӍӊӄӃӄӏӒӧәҿҿࡈ ӖӑӍӒӈҸӃҸӑҿӊӛ ӌҿ ӒӈҸӃӝҺҸҿӑ ӌӄ ӌҸ ӈҸӈӒӧ ӎҸӋӨӑӛࡏ фҹӜӨҺӊҿӌӍ Һ ӃҸһӍӊӍҺӍӖӌӍӋӔҸӅӊҿ stdlib.hࡏint* ptr = NULL;int value = *ptr; // run time error*ptr = 37; // run time errorцҸӃӌӝҿ ӌҸӃҺҸӌӄӨࡈ ӌӍ ӐӒӑӛ ӍҾӌҸ ɯƚǃȒƚȘɾŏɾǞȩȘ ǀŏʕȀɾࡈ ɯƚǃǀŏʕȀɾࡈ ŏżżƚɯɯ ʲǞȩȀŏɾǞȩȘࡈࢀхӏӍһӏҸӋӋҸ ҺӝӎӍӊӌӄӊҸ ӌҿҾӍӎӒӐӑӄӋӒӧ ӍӎҿӏҸӗӄӧࡊࢁࡈ ࡊࡏߟࡏщӈҸӃҸӑҿӊӛࡈ ӒӈҸӃӝҺҸӧәӄӅ ӕӍӑӛ ӈӒҾҸvoid* ࡴ ӐӎҿӗӄҸӊӛӌӝӅ ӑӄӎ ӒӈҸӃҸӑҿӊӨࡈ ӈӍӑӍӏӝӅ ӋӍӂҿӑ ӒӈҸӃӝҺҸӑӛ ӌҸ ӊӧҹӝҿҾҸӌӌӝҿ Һ ӎҸӋӨӑӄࡏ тӍӂҿӑ ҹӝӑӛ ӎӏӄҺҿҾҿӌ ӈ ӊӧҹӍӋӒ ҾӏӒһӍӋӒ ӑӄӎӒ ӒӈҸӃҸӑҿӊҿӅ ӄӍҹӏҸӑӌӍࡏdouble x = 37;double* px = &x;void* p = px;int* py = p;шӊӒӘӗӎҾ ӚӊӐӓӖӓӚӊӊࡋ ࢂхҾӎӓӀҾ ӔӕӊӕӓӄҾ ʮȧǝƆࡓࢃ ࡶ ӖӔӕӓӖӊӐ ӘӜӊӗӅӐӡࡌ ࡎhttp://thecodelesscode.com/case/5?lang=ruߠࡏеӄӌҸӋӄӖҿӐӈҸӨ ӎҸӋӨӑӛࡏࡏхӏҿӄӋӒәҿӐӑҺҸ ҾӄӌҸӋӄӖҿӐӈӍӅ ӎҸӋӨӑӄࡄ бӝҾҿӊӨҿӑӐӨ ӄ ӍӐҺӍҹӍӂҾҸҿӑӐӨ ҾӄӌҸӋӄӖҿӐӈӄ ӎӍ ӃҸӎӏӍӐӒ ӎӏӍһӏҸӋӋӝࡏࡄ цҸӃӋҿӏ ӃҸҾҸҿӑӐӨ ҾӄӌҸӋӄӖҿӐӈӄࡏߢࡏбӝҾҿӊҿӌӄҿ ҹӊӍӈҸ ӎҸӋӨӑӄvoid* malloc(size_t size);ыӒӌӈӗӄӨ ҺӝҾҿӊӨҿӑ ҹӊӍӈ ӎҸӋӨӑӄ ӏҸӃӋҿӏӍӋ size ҹҸӅӑ ӄ ҺӍӃҺӏҸәҸҿӑ ӒӈҸӃҸӑҿӊӛӌҸ ӌҸӖҸӊӍ ҹӊӍӈҸࡏ б ӐӊӒӖҸҿࡈ ҿӐӊӄ ӎҸӋӨӑӛ ҺӝҾҿӊӄӑӛ ӌҿ ӎӍӊӒӖӄӊӍӐӛࡈ ҺӍӃҺӏҸәҸҿӑNULLࡏ фҹӜӨҺӊҿӌҸ Һ ӃҸһӍӊӍҺӍӖӌӍӋ ӔҸӅӊҿ stdlib.hࡏߣࡏфӐҺӍҹӍӂҾҿӌӄҿ ҹӊӍӈҸ ӎҸӋӨӑӄvoid free(void* ptr);ыӒӌӈӗӄӨ ӍӐҺӍҹӍӂҾҸҿӑ ҹӊӍӈ ӎҸӋӨӑӄࡏ жӐӊӄ ptr ӏҸҺҿӌ NULLࡈ ӌӄӖҿһӍ ӌҿ ҾҿӊҸҿӑࡏфҹӜӨҺӊҿӌҸ Һ ӃҸһӍӊӍҺӍӖӌӍӋ ӔҸӅӊҿ stdlib.hࡏхӍӐӊҿ ҺӝӃӍҺҸ ӃӌҸӖҿӌӄҿ ӒӈҸӃҸӑҿӊӨ ptr ӍӐӑҸҿӑӐӨ ӎӏҿӂӌӄӋࡈ ӌӍӏҸӃӝӋҿӌӍҺӝҺҸӑӛ ҿһӍ ӌҿӊӛӃӨࡏуҿӄӐӎӍӊӛӃӒҿӋӒӧ ӎҸӋӨӑӛ ӌӒӂӌӍ ӍҹӨӃҸӑҿӊӛӌӍ ӍӐҺӍҹӍӂҾҸӑӛࡈ ӄӌҸӖҿ ӏҸӌӍ ӄӊӄӎӍӃҾӌӍ ӍӌҸ ӋӍӂҿӑ ӈӍӌӖӄӑӛӐӨ ӒӑҿӖӈҸ ӎҸӋӨӑӄࡏߤࡏхӏӄӋҿӏࡇ ӋҸӐӐӄҺ ҾӄӌҸӋӄӖҿӐӈӍһӍ ӏҸӃӋҿӏҸࡏint n = read_number(); // 5int* p; // ???ߥࡏхӏӄӋҿӏࡇ ӋҸӐӐӄҺ ҾӄӌҸӋӄӖҿӐӈӍһӍ ӏҸӃӋҿӏҸࡏࡐࡐࡐࡐࡐࡐࡐࡐࡐ0x100ࡐࡐࡐࡐࡐࡐ0x113int n = read_number(); // 5int* p; // 0x100p = malloc(n * sizeof(int));if (p == NULL) { /* error */ }ߥࡏхӏӄӋҿӏࡇ ӋҸӐӐӄҺ ҾӄӌҸӋӄӖҿӐӈӍһӍ ӏҸӃӋҿӏҸࡏߟߣࡐࡐࡐ0x100ߟߣࡐࡐࡐߟߣ0x113int n = read_number(); // 5int* p; // 0x100p = malloc(n * sizeof(int));if (p == NULL) { /* error */ }p[0] = p[n/2] = p[n-1] = 37;ߥࡏхӏӄӋҿӏࡇ ӋҸӐӐӄҺ ҾӄӌҸӋӄӖҿӐӈӍһӍ ӏҸӃӋҿӏҸࡏࡐࡐࡐࡐࡐࡐࡐࡐࡐ0x100ࡐࡐࡐࡐࡐࡐ0x113int n = read_number(); // 5int* p; // 0x100p = malloc(n * sizeof(int));if (p == NULL) { /* error */ }p[0] = p[n/2] = p[n-1] = 37;free(p);ߥࡏщӈҸӃҸӑҿӊӄ ӌҸ ӔӒӌӈӗӄӄࡏࡏыӒӌӈӗӄӄ ӈҸӈ ҾҸӌӌӝҿб ӨӃӝӈҿ + Ӑ ӔӒӌӈӗӄӨӋӄ ӋӍӂӌӍ ӏҸҹӍӑҸӑӛ ӈҸӈ Ӑ ҾҸӌӌӝӋӄࡇdouble (*my_func)(double, double) = pow;double x = my_func(3, 2); // x = 9.0ыӒӌӈӗӄӨ ࡴ ӢӑӍ ӌҸҹӍӏ ҹҸӅӑӍҺ Һ ӎҸӋӨӑӄࡈ ӈӍҾӄӏӒӧәӄӕ ӑҿӊӍ ӢӑӍӅ ӔӒӌӈӗӄӄ ӐӎӍӋӍәӛӧ ӋҸӘӄӌӌӝӕ ӈӍӋҸӌҾࡏ кӌҸӖӄӑࡈ ӋӍӂӌӍ ҺӃӨӑӛ ҸҾӏҿӐ ӢӑӍһӍ ࢀӌҸҹӍӏҸҹҸӅӑӍҺࢁࡏаӍӊҿҿ ӔӍӏӋҸӊӛӌӍࡇdouble (*my_func)(double, double) = &pow;double x = (*my_func)(3, 2); // x = 9.0ߝߝࡏхӏӄӋҿӏ ӖӄӐӊҿӌӌӍһӍ ҺӝӖӄӐӊҿӌӄӨ ӎӏӍӄӃҺӍҾӌӍӅ Һ ӑӍӖӈҿdouble diff(double x, double (*f)(double)) {double dx = 0.01;return (f(x + dx) - f(x)) / dx;}double square(double x) {return x * x;}printf("%g\n", diff(M_PI/3, sin)); // 0.495662printf("%g\n", diff(M_PI/6, cos)); // -0.504322printf("%g\n", diff(3, square));// 6.01ߝߞࡏчӄӋҺӍӊӝ ӄ ӈӍҾӄӏӍҺӈӄࡏࡏчӄӋҺӍӊӝ Һ +чӄӋҺӍӊӝ ӃҸҾҸӧӑӐӨ Һ ӍҾӄӌҸӏӌӝӕ ӈҸҺӝӖӈҸӕࡈ ӕӏҸӌӨӑӐӨ Һ ӎҿӏҿӋҿӌӌӝӕ ӑӄӎҸ charࡏchar x = 'H';char y = 'i';printf("%c%c\n", x, y); // HiߝߠࡏпӍҾӄӏӍҺӈӄпӍҾӄӏӍҺӈҸ ࡴ ӐӍӍӑҺҿӑӐӑҺӄҿ ӋҿӂҾӒ ӐӄӋҺӍӊӍӋ ӄ ӗҿӊӍӖӄӐӊҿӌӌӝӋ ӈӍҾӍӋࡏë+vv ࡴ ӔӒӌҾҸӋҿӌӑҸӊӛӌҸӨ ߣࡷҹӄӑӌҸӨ ӈӍҾӄӏӍҺӈҸࡇࡄ ߟߞ ӒӎӏҸҺӊӨӧәӄӕ ӐӄӋҺӍӊҸࡈࡄ '\0'ࡈ ӈӍҾ ߜ ࡴ ӎӒӐӑӍӅ ӐӄӋҺӍӊࡈࡄ '\t'ࡈ ӈӍҾ ߥ ࡴ ӑҸҹӒӊӨӗӄӨࡈࡄ '\n'ࡈ ӈӍҾ ߝߜ ࡴ ӎҿӏҿҺӍҾ ӐӑӏӍӈӄࡈࡄ ࡊࡄ ߥߢ ӄӌӔӍӏӋҸӗӄӍӌӌӝӕ ӐӄӋҺӍӊӍҺࡏࡄ '0'..'9' ࡴ ӗӄӔӏӝࡈࡄ 'a'..'z'ࡈ 'A'..'Z' ࡴ ҹӒӈҺӝࡈࡄ ',', '?', ...
ࡴ ӎӒӌӈӑӒҸӗӄӨࡏࡄ ࡊߝߡࡏчӄӋҺӍӊӝ ӈҸӈ ӖӄӐӊҸchar a = 'X';printf("%c\n", a); // Xprintf("%d\n", a); // 88char b = a + 1;printf("%c\n", b); // YߝߢࡏуҸӗӄӍӌҸӊӛӌӝҿ ӐӄӋҺӍӊӝЯ ӖӑӍ ҾҿӊҸӑӛࡈ ҿӐӊӄ ӕӍӖҿӑӐӨ ӄӐӎӍӊӛӃӍҺҸӑӛ ӈӄӏӄӊӊӄӗӒࡈ ӒӋӊӨӒӑӝ ӄ ӄҿӏӍһӊӄӔӝࡐߤࡷҹӄӑӌӝҿ ӈӄӏӄӊӊӄӖҿӐӈӄҿ ӈӍҾӄӏӍҺӈӄࡈ ҹҸӃӄӏӒӧәӄҿӐӨ ӌҸ ë+vvࡇ пфлࡷߤࡈĦǞȘƇȩʶɯࡷߝߞߡߝࡈ ࡊуҸ ӎӏҸӈӑӄӈҿ ӈҸӈࡷӑӍ ӑҸӈࡇ ӄӘॏӧӜӏӚ ॊӝӕӜөॏӘӡӘӜӏӣӘӚߝߣࡏўӌӄӈӍҾўӌӄӈӍҾ ࡴ ӋӌӍһӍҹҸӅӑӍҺҸӨ ӈӍҾӄӏӍҺӈҸࡈ ӎӍӈӏӝҺҸӧәҸӨ ӎӍӖӑӄ ҺӐҿ ӎӄӐӛӋҿӌӌӝҿӨӃӝӈӄࡏхӍӃҺӍӊӨҿӑ ӈӍҾӄӏӍҺҸӑӛ ߝ ߝߝߞ ߜߢߠ ӐӄӋҺӍӊӍҺࡏ б ҺҿӏӐӄӄ ߥࡏߜࡈ ӄӧӌӛ ߞߜߝߢ һࡏࡈӄӐӎӍӊӛӃӒҿӑӐӨ ӊӄӘӛ ߝߞߤ ߞߟߣࡏчӍҾҿӏӂӄӑ ҺӐҿ ӌҸӗӄӍӌҸӊӛӌӝҿ ӐӄӋҺӍӊӝࡈ ӋҸӑҿӋҸӑӄӖҿӐӈӄҿ ӐӄӋҺӍӊӝࡈ ӐӄӋҺӍӊӝҾӏҿҺӌӄӕ ӎӄӐӛӋҿӌӌӍӐӑҿӅ ӄ ӋӌӍһӍҿ ҾӏӒһӍҿࡈ ҺӈӊӧӖҸӨ ☺ ☹ ӄ ҾҸӂҿ ࡋߝߤࡏчӑӏӍӈӄࡏࡏчӑӏӍӈӄчӑӏӍӈҸ ࡴ ӢӑӍ ӌҸҹӍӏ ӐӄӋҺӍӊӍҺࡏ б ӨӃӝӈҿ + ӐӑӏӍӈӄ ӎӏҿҾӐӑҸҺӊӨӧӑӐӨ Һ ҺӄҾҿӋҸӐӐӄҺӍҺ ӐӄӋҺӍӊӍҺ ӑӄӎҸ charࡏ пӍӌӐӑҸӌӑӌӝҿ ӐӑӏӍӈӄ ӃҸҾҸӧӑӐӨ Һ ҾҺӍӅӌӝӕӈҸҺӝӖӈҸӕࡏеӊӄӌҸ ӐӑӏӍӈӄ ӨҺӌӍ ӌҿ ӕӏҸӌӄӑӐӨࡇ ӎӍӐӊҿ ӎӍӐӊҿҾӌҿһӍ ӐӄӋҺӍӊҸ ӐӑӏӍӈӄ ӕӏҸӌӄӑӐӨӐӎҿӗӄҸӊӛӌӝӅ ӐӄӋҺӍӊ '\0'ࡏchar* str = "Hi";printf("%s\n", str);// Hiprintf("%d - %c\n", str[0], str[0]); // 72 - Hprintf("%d - %c\n", str[1], str[1]); // 105 - iprintf("%d - %c\n", str[2], str[2]); // 0 -ߞߜࡏшӍӌӈӍӐӑӛ Ӑ ӄӌӄӗӄҸӊӄӃҸӗӄҿӅ ӐӑӏӍӈࡄ test ࡴ ӒӈҸӃҸӑҿӊӛ ӌҸ ӈӍӌӐӑҸӌӑӌӒӧ ӐӑӏӍӈӒࡏchar* test = "cat";test[2] = 'r'; // run time errorࡄ test ࡴ ӋҸӐӐӄҺࡈ ӎӏӍӄӌӄӗӄҸӊӄӃӄӏӍҺҸӌӌӝӅ ӈӍӌӐӑҸӌӑӌӍӅ ӐӑӏӍӈӍӅࡏchar test[] = "cat";test[2] = 'r';printf("%s\n", test); // carߞߝࡏпӍӌҿӗ ӑӏҿӑӛҿӅ ӊҿӈӗӄӄߞߞ.
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.