Меңгерген меңзер мен С-дегі нөлдік көрсеткіштің айырмашылығы неде? Техникалық жағынан айтсақ, екеуі де бірдей көрінеді.


жауап 1:

Егер сіз осы көрсеткіштердің біреуін ұнатпасаңыз, онда ешқандай айырмашылық жоқ. Шленкер демек, меңзер көрсеткен жады басқа бір нәрсе үшін пайдаланылуы мүмкін. Дегенмен, бағдарлама ескі мазмұн әлі де бар деп болжайды және оған қол жеткізуге тырысады. Бұл әдетте бағдарламаны орындау кезінде дұрыс емес әрекетке әкеледі.

Сонымен қатар, сұрақ сіз «ұпайларды түсінбейтіндігіңізді» білдіреді. Егер сіз жадты әр өрісте мазмұны бар нөмірленген өрістердің қатары ретінде санасаңыз (мәні, әдетте 0 ... 255), меңзер жай бүтін сан болып табылады (мен архитектуралық ерекшеліктерді жеңілдетемін) Нөмір осы өрістердің біреуін (мән емес) қамтиды.


жауап 2:

Мен мұнда көптеген «ағылшынша» көремін, олар тұжырымдаманы жақсы білетін адамға пайдалы болуы мүмкін, бірақ білмейтін адам үшін бұл гиббиш сөзінен басқа ештеңе болмайды. Алайда, күлкілі цитаталар жауаптар мен метафораларға жауап береді. Кешіріңіз, егер ол біреуді ренжітсе.

Null көрсеткіші: мекен-жайы жоқ немесе NULL деп көрсететін сілтеме. Бұл кезде жазу қате. Бұл бағдарламашылардың кездейсоқ орынға жазылуына жол бермеу үшін, бұл сегменттеу қателіктеріне және / немесе апатқа әкелуі мүмкін. Сілтегіш әрдайым NULL-мен инициалдануы керек және жазудың алдында NULL тексерілуі керек. Мына сценарийді қарастырыңыз:

int * p; // Қазіргі уақытта бұл көрсеткіште кездейсоқ мекенжай бар және кез келген позицияға сілтеме жасай алады, тіпті сегменттен тыс

* p = 10; // Бұл міндетті түрде қате жібереді.

қауіпсіз нәрсе болады:

int * p = NULL;

егер (p! = NULL)

* p = 10;

Ілгерілеткіш көрсеткіш: Атауынан көрініп тұрғандай, бұл қайда бағыттау керектігін білмейтін көрсеткіш, себебі ол бастапқыда көрсеткен жад блогы қандай да бір түрде босатылды.

Меңзерді байлаудың көптеген әдістері бар. Ең көп таралған әдіс - жаңаларын жасау, көшіру және жою

int * p = NULL; int * q = NULL;

p = жаңа x;

q = p;

q жою; // q және q жад блогының көрсеткіші жадтан шығарылады

// осы жерден бізде жадыда жоқ мекен-жайы бар көрсеткіш сілтемесі бар. Егер біз осы көрсеткішке мән беруге тырысатын болсақ, онда біз қиындыққа тап боламыз, p көрсеткіш осында ілулі тұр

* p = 10; // апат

Кездейсоқ таңбаланған меңзерді құрудың тағы бір әдісі - объектіні тегіс көшірмесін жасау, оны тағайындау немесе нысанды компилятор ұсынған көшіру конструкторын қолдана отырып әдіске беру, бұл өз кезегінде ол тегіс болып табылады. Сіз үшін жасалған көшірме.


жауап 3:

Мен мұнда көптеген «ағылшынша» көремін, олар тұжырымдаманы жақсы білетін адамға пайдалы болуы мүмкін, бірақ білмейтін адам үшін бұл гиббиш сөзінен басқа ештеңе болмайды. Алайда, күлкілі цитаталар жауаптар мен метафораларға жауап береді. Кешіріңіз, егер ол біреуді ренжітсе.

Null көрсеткіші: мекен-жайы жоқ немесе NULL деп көрсететін сілтеме. Бұл кезде жазу қате. Бұл бағдарламашылардың кездейсоқ орынға жазылуына жол бермеу үшін, бұл сегменттеу қателіктеріне және / немесе апатқа әкелуі мүмкін. Сілтегіш әрдайым NULL-мен инициалдануы керек және жазудың алдында NULL тексерілуі керек. Мына сценарийді қарастырыңыз:

int * p; // Қазіргі уақытта бұл көрсеткіште кездейсоқ мекенжай бар және кез келген позицияға сілтеме жасай алады, тіпті сегменттен тыс

* p = 10; // Бұл міндетті түрде қате жібереді.

қауіпсіз нәрсе болады:

int * p = NULL;

егер (p! = NULL)

* p = 10;

Ілгерілеткіш көрсеткіш: Атауынан көрініп тұрғандай, бұл қайда бағыттау керектігін білмейтін көрсеткіш, себебі ол бастапқыда көрсеткен жад блогы қандай да бір түрде босатылды.

Меңзерді байлаудың көптеген әдістері бар. Ең көп таралған әдіс - жаңаларын жасау, көшіру және жою

int * p = NULL; int * q = NULL;

p = жаңа x;

q = p;

q жою; // q және q жад блогының көрсеткіші жадтан шығарылады

// осы жерден бізде жадыда жоқ мекен-жайы бар көрсеткіш сілтемесі бар. Егер біз осы көрсеткішке мән беруге тырысатын болсақ, онда біз қиындыққа тап боламыз, p көрсеткіш осында ілулі тұр

* p = 10; // апат

Кездейсоқ таңбаланған меңзерді құрудың тағы бір әдісі - объектіні тегіс көшірмесін жасау, оны тағайындау немесе нысанды компилятор ұсынған көшіру конструкторын қолдана отырып әдіске беру, бұл өз кезегінде ол тегіс болып табылады. Сіз үшін жасалған көшірме.


жауап 4:

Мен мұнда көптеген «ағылшынша» көремін, олар тұжырымдаманы жақсы білетін адамға пайдалы болуы мүмкін, бірақ білмейтін адам үшін бұл гиббиш сөзінен басқа ештеңе болмайды. Алайда, күлкілі цитаталар жауаптар мен метафораларға жауап береді. Кешіріңіз, егер ол біреуді ренжітсе.

Null көрсеткіші: мекен-жайы жоқ немесе NULL деп көрсететін сілтеме. Бұл кезде жазу қате. Бұл бағдарламашылардың кездейсоқ орынға жазылуына жол бермеу үшін, бұл сегменттеу қателіктеріне және / немесе апатқа әкелуі мүмкін. Сілтегіш әрдайым NULL-мен инициалдануы керек және жазудың алдында NULL тексерілуі керек. Мына сценарийді қарастырыңыз:

int * p; // Қазіргі уақытта бұл көрсеткіште кездейсоқ мекенжай бар және кез келген позицияға сілтеме жасай алады, тіпті сегменттен тыс

* p = 10; // Бұл міндетті түрде қате жібереді.

қауіпсіз нәрсе болады:

int * p = NULL;

егер (p! = NULL)

* p = 10;

Ілгерілеткіш көрсеткіш: Атауынан көрініп тұрғандай, бұл қайда бағыттау керектігін білмейтін көрсеткіш, себебі ол бастапқыда көрсеткен жад блогы қандай да бір түрде босатылды.

Меңзерді байлаудың көптеген әдістері бар. Ең көп таралған әдіс - жаңаларын жасау, көшіру және жою

int * p = NULL; int * q = NULL;

p = жаңа x;

q = p;

q жою; // q және q жад блогының көрсеткіші жадтан шығарылады

// осы жерден бізде жадыда жоқ мекен-жайы бар көрсеткіш сілтемесі бар. Егер біз осы көрсеткішке мән беруге тырысатын болсақ, онда біз қиындыққа тап боламыз, p көрсеткіш осында ілулі тұр

* p = 10; // апат

Кездейсоқ таңбаланған меңзерді құрудың тағы бір әдісі - объектіні тегіс көшірмесін жасау, оны тағайындау немесе нысанды компилятор ұсынған көшіру конструкторын қолдана отырып әдіске беру, бұл өз кезегінде ол тегіс болып табылады. Сіз үшін жасалған көшірме.


жауап 5:

Мен мұнда көптеген «ағылшынша» көремін, олар тұжырымдаманы жақсы білетін адамға пайдалы болуы мүмкін, бірақ білмейтін адам үшін бұл гиббиш сөзінен басқа ештеңе болмайды. Алайда, күлкілі цитаталар жауаптар мен метафораларға жауап береді. Кешіріңіз, егер ол біреуді ренжітсе.

Null көрсеткіші: мекен-жайы жоқ немесе NULL деп көрсететін сілтеме. Бұл кезде жазу қате. Бұл бағдарламашылардың кездейсоқ орынға жазылуына жол бермеу үшін, бұл сегменттеу қателіктеріне және / немесе апатқа әкелуі мүмкін. Сілтегіш әрдайым NULL-мен инициалдануы керек және жазудың алдында NULL тексерілуі керек. Мына сценарийді қарастырыңыз:

int * p; // Қазіргі уақытта бұл көрсеткіште кездейсоқ мекенжай бар және кез келген позицияға сілтеме жасай алады, тіпті сегменттен тыс

* p = 10; // Бұл міндетті түрде қате жібереді.

қауіпсіз нәрсе болады:

int * p = NULL;

егер (p! = NULL)

* p = 10;

Ілгерілеткіш көрсеткіш: Атауынан көрініп тұрғандай, бұл қайда бағыттау керектігін білмейтін көрсеткіш, себебі ол бастапқыда көрсеткен жад блогы қандай да бір түрде босатылды.

Меңзерді байлаудың көптеген әдістері бар. Ең көп таралған әдіс - жаңаларын жасау, көшіру және жою

int * p = NULL; int * q = NULL;

p = жаңа x;

q = p;

q жою; // q және q жад блогының көрсеткіші жадтан шығарылады

// осы жерден бізде жадыда жоқ мекен-жайы бар көрсеткіш сілтемесі бар. Егер біз осы көрсеткішке мән беруге тырысатын болсақ, онда біз қиындыққа тап боламыз, p көрсеткіш осында ілулі тұр

* p = 10; // апат

Кездейсоқ таңбаланған меңзерді құрудың тағы бір әдісі - объектіні тегіс көшірмесін жасау, оны тағайындау немесе нысанды компилятор ұсынған көшіру конструкторын қолдана отырып әдіске беру, бұл өз кезегінде ол тегіс болып табылады. Сіз үшін жасалған көшірме.


жауап 6:

Мен мұнда көптеген «ағылшынша» көремін, олар тұжырымдаманы жақсы білетін адамға пайдалы болуы мүмкін, бірақ білмейтін адам үшін бұл гиббиш сөзінен басқа ештеңе болмайды. Алайда, күлкілі цитаталар жауаптар мен метафораларға жауап береді. Кешіріңіз, егер ол біреуді ренжітсе.

Null көрсеткіші: мекен-жайы жоқ немесе NULL деп көрсететін сілтеме. Бұл кезде жазу қате. Бұл бағдарламашылардың кездейсоқ орынға жазылуына жол бермеу үшін, бұл сегменттеу қателіктеріне және / немесе апатқа әкелуі мүмкін. Сілтегіш әрдайым NULL-мен инициалдануы керек және жазудың алдында NULL тексерілуі керек. Мына сценарийді қарастырыңыз:

int * p; // Қазіргі уақытта бұл көрсеткіште кездейсоқ мекенжай бар және кез келген позицияға сілтеме жасай алады, тіпті сегменттен тыс

* p = 10; // Бұл міндетті түрде қате жібереді.

қауіпсіз нәрсе болады:

int * p = NULL;

егер (p! = NULL)

* p = 10;

Ілгерілеткіш көрсеткіш: Атауынан көрініп тұрғандай, бұл қайда бағыттау керектігін білмейтін көрсеткіш, себебі ол бастапқыда көрсеткен жад блогы қандай да бір түрде босатылды.

Меңзерді байлаудың көптеген әдістері бар. Ең көп таралған әдіс - жаңаларын жасау, көшіру және жою

int * p = NULL; int * q = NULL;

p = жаңа x;

q = p;

q жою; // q және q жад блогының көрсеткіші жадтан шығарылады

// осы жерден бізде жадыда жоқ мекен-жайы бар көрсеткіш сілтемесі бар. Егер біз осы көрсеткішке мән беруге тырысатын болсақ, онда біз қиындыққа тап боламыз, p көрсеткіш осында ілулі тұр

* p = 10; // апат

Кездейсоқ таңбаланған меңзерді құрудың тағы бір әдісі - объектіні тегіс көшірмесін жасау, оны тағайындау немесе нысанды компилятор ұсынған көшіру конструкторын қолдана отырып әдіске беру, бұл өз кезегінде ол тегіс болып табылады. Сіз үшін жасалған көшірме.


жауап 7:

Мен мұнда көптеген «ағылшынша» көремін, олар тұжырымдаманы жақсы білетін адамға пайдалы болуы мүмкін, бірақ білмейтін адам үшін бұл гиббиш сөзінен басқа ештеңе болмайды. Алайда, күлкілі цитаталар жауаптар мен метафораларға жауап береді. Кешіріңіз, егер ол біреуді ренжітсе.

Null көрсеткіші: мекен-жайы жоқ немесе NULL деп көрсететін сілтеме. Бұл кезде жазу қате. Бұл бағдарламашылардың кездейсоқ орынға жазылуына жол бермеу үшін, бұл сегменттеу қателіктеріне және / немесе апатқа әкелуі мүмкін. Сілтегіш әрдайым NULL-мен инициалдануы керек және жазудың алдында NULL тексерілуі керек. Мына сценарийді қарастырыңыз:

int * p; // Қазіргі уақытта бұл көрсеткіште кездейсоқ мекенжай бар және кез келген позицияға сілтеме жасай алады, тіпті сегменттен тыс

* p = 10; // Бұл міндетті түрде қате жібереді.

қауіпсіз нәрсе болады:

int * p = NULL;

егер (p! = NULL)

* p = 10;

Ілгерілеткіш көрсеткіш: Атауынан көрініп тұрғандай, бұл қайда бағыттау керектігін білмейтін көрсеткіш, себебі ол бастапқыда көрсеткен жад блогы қандай да бір түрде босатылды.

Меңзерді байлаудың көптеген әдістері бар. Ең көп таралған әдіс - жаңаларын жасау, көшіру және жою

int * p = NULL; int * q = NULL;

p = жаңа x;

q = p;

q жою; // q және q жад блогының көрсеткіші жадтан шығарылады

// осы жерден бізде жадыда жоқ мекен-жайы бар көрсеткіш сілтемесі бар. Егер біз осы көрсеткішке мән беруге тырысатын болсақ, онда біз қиындыққа тап боламыз, p көрсеткіш осында ілулі тұр

* p = 10; // апат

Кездейсоқ таңбаланған меңзерді құрудың тағы бір әдісі - объектіні тегіс көшірмесін жасау, оны тағайындау немесе нысанды компилятор ұсынған көшіру конструкторын қолдана отырып әдіске беру, бұл өз кезегінде ол тегіс болып табылады. Сіз үшін жасалған көшірме.


жауап 8:

Мен мұнда көптеген «ағылшынша» көремін, олар тұжырымдаманы жақсы білетін адамға пайдалы болуы мүмкін, бірақ білмейтін адам үшін бұл гиббиш сөзінен басқа ештеңе болмайды. Алайда, күлкілі цитаталар жауаптар мен метафораларға жауап береді. Кешіріңіз, егер ол біреуді ренжітсе.

Null көрсеткіші: мекен-жайы жоқ немесе NULL деп көрсететін сілтеме. Бұл кезде жазу қате. Бұл бағдарламашылардың кездейсоқ орынға жазылуына жол бермеу үшін, бұл сегменттеу қателіктеріне және / немесе апатқа әкелуі мүмкін. Сілтегіш әрдайым NULL-мен инициалдануы керек және жазудың алдында NULL тексерілуі керек. Мына сценарийді қарастырыңыз:

int * p; // Қазіргі уақытта бұл көрсеткіште кездейсоқ мекенжай бар және кез келген позицияға сілтеме жасай алады, тіпті сегменттен тыс

* p = 10; // Бұл міндетті түрде қате жібереді.

қауіпсіз нәрсе болады:

int * p = NULL;

егер (p! = NULL)

* p = 10;

Ілгерілеткіш көрсеткіш: Атауынан көрініп тұрғандай, бұл қайда бағыттау керектігін білмейтін көрсеткіш, себебі ол бастапқыда көрсеткен жад блогы қандай да бір түрде босатылды.

Меңзерді байлаудың көптеген әдістері бар. Ең көп таралған әдіс - жаңаларын жасау, көшіру және жою

int * p = NULL; int * q = NULL;

p = жаңа x;

q = p;

q жою; // q және q жад блогының көрсеткіші жадтан шығарылады

// осы жерден бізде жадыда жоқ мекен-жайы бар көрсеткіш сілтемесі бар. Егер біз осы көрсеткішке мән беруге тырысатын болсақ, онда біз қиындыққа тап боламыз, p көрсеткіш осында ілулі тұр

* p = 10; // апат

Кездейсоқ таңбаланған меңзерді құрудың тағы бір әдісі - объектіні тегіс көшірмесін жасау, оны тағайындау немесе нысанды компилятор ұсынған көшіру конструкторын қолдана отырып әдіске беру, бұл өз кезегінде ол тегіс болып табылады. Сіз үшін жасалған көшірме.


жауап 9:

Мен мұнда көптеген «ағылшынша» көремін, олар тұжырымдаманы жақсы білетін адамға пайдалы болуы мүмкін, бірақ білмейтін адам үшін бұл гиббиш сөзінен басқа ештеңе болмайды. Алайда, күлкілі цитаталар жауаптар мен метафораларға жауап береді. Кешіріңіз, егер ол біреуді ренжітсе.

Null көрсеткіші: мекен-жайы жоқ немесе NULL деп көрсететін сілтеме. Бұл кезде жазу қате. Бұл бағдарламашылардың кездейсоқ орынға жазылуына жол бермеу үшін, бұл сегменттеу қателіктеріне және / немесе апатқа әкелуі мүмкін. Сілтегіш әрдайым NULL-мен инициалдануы керек және жазудың алдында NULL тексерілуі керек. Мына сценарийді қарастырыңыз:

int * p; // Қазіргі уақытта бұл көрсеткіште кездейсоқ мекенжай бар және кез келген позицияға сілтеме жасай алады, тіпті сегменттен тыс

* p = 10; // Бұл міндетті түрде қате жібереді.

қауіпсіз нәрсе болады:

int * p = NULL;

егер (p! = NULL)

* p = 10;

Ілгерілеткіш көрсеткіш: Атауынан көрініп тұрғандай, бұл қайда бағыттау керектігін білмейтін көрсеткіш, себебі ол бастапқыда көрсеткен жад блогы қандай да бір түрде босатылды.

Меңзерді байлаудың көптеген әдістері бар. Ең көп таралған әдіс - жаңаларын жасау, көшіру және жою

int * p = NULL; int * q = NULL;

p = жаңа x;

q = p;

q жою; // q және q жад блогының көрсеткіші жадтан шығарылады

// осы жерден бізде жадыда жоқ мекен-жайы бар көрсеткіш сілтемесі бар. Егер біз осы көрсеткішке мән беруге тырысатын болсақ, онда біз қиындыққа тап боламыз, p көрсеткіш осында ілулі тұр

* p = 10; // апат

Кездейсоқ таңбаланған меңзерді құрудың тағы бір әдісі - объектіні тегіс көшірмесін жасау, оны тағайындау немесе нысанды компилятор ұсынған көшіру конструкторын қолдана отырып әдіске беру, бұл өз кезегінде ол тегіс болып табылады. Сіз үшін жасалған көшірме.


жауап 10:

Мен мұнда көптеген «ағылшынша» көремін, олар тұжырымдаманы жақсы білетін адамға пайдалы болуы мүмкін, бірақ білмейтін адам үшін бұл гиббиш сөзінен басқа ештеңе болмайды. Алайда, күлкілі цитаталар жауаптар мен метафораларға жауап береді. Кешіріңіз, егер ол біреуді ренжітсе.

Null көрсеткіші: мекен-жайы жоқ немесе NULL деп көрсететін сілтеме. Бұл кезде жазу қате. Бұл бағдарламашылардың кездейсоқ орынға жазылуына жол бермеу үшін, бұл сегменттеу қателіктеріне және / немесе апатқа әкелуі мүмкін. Сілтегіш әрдайым NULL-мен инициалдануы керек және жазудың алдында NULL тексерілуі керек. Мына сценарийді қарастырыңыз:

int * p; // Қазіргі уақытта бұл көрсеткіште кездейсоқ мекенжай бар және кез келген позицияға сілтеме жасай алады, тіпті сегменттен тыс

* p = 10; // Бұл міндетті түрде қате жібереді.

қауіпсіз нәрсе болады:

int * p = NULL;

егер (p! = NULL)

* p = 10;

Ілгерілеткіш көрсеткіш: Атауынан көрініп тұрғандай, бұл қайда бағыттау керектігін білмейтін көрсеткіш, себебі ол бастапқыда көрсеткен жад блогы қандай да бір түрде босатылды.

Меңзерді байлаудың көптеген әдістері бар. Ең көп таралған әдіс - жаңаларын жасау, көшіру және жою

int * p = NULL; int * q = NULL;

p = жаңа x;

q = p;

q жою; // q және q жад блогының көрсеткіші жадтан шығарылады

// осы жерден бізде жадыда жоқ мекен-жайы бар көрсеткіш сілтемесі бар. Егер біз осы көрсеткішке мән беруге тырысатын болсақ, онда біз қиындыққа тап боламыз, p көрсеткіш осында ілулі тұр

* p = 10; // апат

Кездейсоқ таңбаланған меңзерді құрудың тағы бір әдісі - объектіні тегіс көшірмесін жасау, оны тағайындау немесе нысанды компилятор ұсынған көшіру конструкторын қолдана отырып әдіске беру, бұл өз кезегінде ол тегіс болып табылады. Сіз үшін жасалған көшірме.