Real-world Halimbawa ng Pointer Arithmetic at ang mga Patibong Nito sa C at C+++
Table of Contents
Ang Burter aritmetika ay isang karaniwang katangian sa C at C++, na nagpapahintulot ng direktang manipulasyon ng mga memory address. Bagaman ang malakas, hindi tamang paggamit ay maaaring humantong sa mga bug, seguridad vaulnerability, at hindi pa nai-refluensiyal na pag-uugali. Ang artikulong ito ay naghaharap ng mga reality-world na halimbawa na naglalarawan kapuwa sa mga aplikasyon at mga patibong ng pointer aritmetika.
Halimbawa 1: Mga Array na Nag - aalinlangan
Ang aritmetikang pangturo ay kadalasang ginagamit upang mabisang i - tanser sa pamamagitan ng mga array. Halimbawa, upang bilangin ang mga elemento ng isang hanay na integer:
[[Correct)[
int sum = 0;
int *pr = hanay;
para sa (int i = 0; i < sukat; i++) ⁇
sum += *(ptr + i);
⁇
Tamang naaccess ng pamamaraang ito ang mga elementong array gamit ang pointer aritmetika.
Pitfall 1: Pointer Arithmetic Sa Kabila ng mga Pampalaki ng Array
Ang mga nag - uudyok ng damdamin na higit pa sa naihandang memorya ay maaaring maging sanhi ng di - maipaliwanag na paggawi.
int *pr = hanay;
para sa (int i = 0; i <= laki; i++) ⁇
printf("%dn", *(ptr + i));
⁇
Ang pagkuha *(ptr + sukat) ay nakahihigit sa mga hangganan ng hanay, na humahantong sa hindi mahulaang mga resulta.
Halimbawa 2: Pag - uudyok sa mga Manipulasyon
Ang aritmetikang pangturo ay madalas na ginagamit sa pagpoproseso ng strando. Halimbawa, ang pagkopya ng isang strando:
[[Correct appoach:]]
char *src = "Hello";
char dest[6];
char *p = src;
char *q = dest;
samantalang (*p) ⁇
*q+ = *p++;
⁇
*q = '';
Pitfall 2: Mga sira sa Pagpe - Slog na Pagkopya
Halimbawa, ang hindi paglalaan ng lugar para sa null determinator o pagkopya sa labas ng neutral na mga dahilan ay umaapaw.
char dest[5];
char *p = "World";
para sa (int i = 0; i <= 5; i++) ⁇
dest[i] = p[i];
⁇
Ito ay nag-ebolb ng anim na karakter sa isang limang-character na neutral, na nagiging sanhi ng pag-apaw.
Pagsasaayos
Ang Pointer aritmetika ay nagbibigay ng kakayahang umangkop sa C at C++, ngunit nangangailangan ng maingat na pangangasiwa upang maiwasan ang mga pagkakamali.Ang pag-unawa sa karaniwang mga patibong ay nakakatulong sa paghadlang ng mga isyu ng bugs at seguridad sa paggawa ng software.