Kāda ir atšķirība starp paceļamo rādītāju un nulles rādītāju C? Tehniski abi šķiet vienādi.


Atbilde 1:

Nav atšķirības, ja vien jūs neatceļat nevienu no šiem norādījumiem. Tāpēc pakāršana nozīmē, ka atmiņu, uz kuru norāda rādītājs, var izmantot atkārtoti kaut kam citam, taču programma pieņem, ka vecais saturs joprojām atrodas, un mēģina tai piekļūt. Tas parasti noved pie nepareizas izturēšanās kādā programmas izpildes brīdī.

Turklāt es uzskatu, ka pats jautājums skaidri norāda, ka jūs "nesaprotat norādes". Ja jūs iedomājaties atmiņu kā numurētu lodziņu rindu, kurā katrā lodziņā var būt saturs (vērtība parasti ir 0 ... 255), tad rādītājs ir vienkārši vesels skaitlis (es šeit vienkāršoju arhitektūras specifiku), kurā ir skaitlis (nevis vērtība).


Atbilde 2:

Es šeit redzu daudz "angļu", kas varētu būt noderīgi kādam, kurš jau zina šo jēdzienu, bet kādam, kurš to nedara, tas būs nekas cits kā jucekļa teksti. Tomēr jautrais koeficients atbildēs un metaforās ir kutelīgs. Atvainojiet, ja tas kādu aizvaino.

Null Pointer: rādītājs, kurā ir norādīta adrese, kurā nekas nav teikts vai teikts, ka NULL atrašanās vieta. Rakstīšana šajā vietā ir kļūda. Tas ir paredzēts, lai novērstu programmētāju nejaušu ierakstīšanu atmiņas vietā, kas varētu izraisīt segmentācijas traucējumus un / vai avāriju. Ideja bija vienmēr inicializēt rādītāju ar NULL un pirms rakstīšanas pārbaudīt, vai NULL nav. Apsveriet šo scenāriju:

int * p; // šobrīd šajā rādītājā ir nejauša adrese, tas var norādīt uz jebkuru vietu, pat ārpus segmenta

* p = 10; // tas noteikti piešķirs vainu.

drošs veids būtu kaut kas līdzīgs šim:

int * p = NULL;

ja (p! = NULL)

* p = 10;

Rāpojošais rādītājs: kā norāda nosaukums, rādītājs, kuram nav nozīmes, kur norādīt, kopš atmiņas bloks, uz kuru tas sākotnēji norādīja, tiek kaut kā atbrīvots.

Ir daudz dažādu iespēju, kā padarīt rādītāju paklanu. Visizplatītākais veids ir jauna, kopēšana un dzēšana

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

p = jauns x;

q = p;

dzēst q; // Gan q, gan atmiņas bloka rādītājs ar q tiek noņemts no atmiņas

// no šejienes mums ir rādītājs p, kura adrese nav atmiņā. Ja mēs mēģinām šim rādītājam piešķirt zināmu vērtību, mēs nonākam nepatikšanās, šeit ir ritošais rādītājs

* p = 10; // avārija

citi veidi, kā jūs, iespējams, nejauši izveidosit nokareno rādītāju, būtu veikt seklu objekta kopiju, vai nu piešķirot, vai nododot objektu metodei, tādējādi izmantojot kompilatora nodrošinātu kopiju konstruktoru, kurš atkal jums seklu kopiju.


Atbilde 3:

Es šeit redzu daudz "angļu", kas varētu būt noderīgi kādam, kurš jau zina šo jēdzienu, bet kādam, kurš to nedara, tas būs nekas cits kā jucekļa teksti. Tomēr jautrais koeficients atbildēs un metaforās ir kutelīgs. Atvainojiet, ja tas kādu aizvaino.

Null Pointer: rādītājs, kurā ir norādīta adrese, kurā nekas nav teikts vai teikts, ka NULL atrašanās vieta. Rakstīšana šajā vietā ir kļūda. Tas ir paredzēts, lai novērstu programmētāju nejaušu ierakstīšanu atmiņas vietā, kas varētu izraisīt segmentācijas traucējumus un / vai avāriju. Ideja bija vienmēr inicializēt rādītāju ar NULL un pirms rakstīšanas pārbaudīt, vai NULL nav. Apsveriet šo scenāriju:

int * p; // šobrīd šajā rādītājā ir nejauša adrese, tas var norādīt uz jebkuru vietu, pat ārpus segmenta

* p = 10; // tas noteikti piešķirs vainu.

drošs veids būtu kaut kas līdzīgs šim:

int * p = NULL;

ja (p! = NULL)

* p = 10;

Rāpojošais rādītājs: kā norāda nosaukums, rādītājs, kuram nav nozīmes, kur norādīt, kopš atmiņas bloks, uz kuru tas sākotnēji norādīja, tiek kaut kā atbrīvots.

Ir daudz dažādu iespēju, kā padarīt rādītāju paklanu. Visizplatītākais veids ir jauna, kopēšana un dzēšana

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

p = jauns x;

q = p;

dzēst q; // Gan q, gan atmiņas bloka rādītājs ar q tiek noņemts no atmiņas

// no šejienes mums ir rādītājs p, kura adrese nav atmiņā. Ja mēs mēģinām šim rādītājam piešķirt zināmu vērtību, mēs nonākam nepatikšanās, šeit ir ritošais rādītājs

* p = 10; // avārija

citi veidi, kā jūs, iespējams, nejauši izveidosit nokareno rādītāju, būtu veikt seklu objekta kopiju, vai nu piešķirot, vai nododot objektu metodei, tādējādi izmantojot kompilatora nodrošinātu kopiju konstruktoru, kurš atkal jums seklu kopiju.


Atbilde 4:

Es šeit redzu daudz "angļu", kas varētu būt noderīgi kādam, kurš jau zina šo jēdzienu, bet kādam, kurš to nedara, tas būs nekas cits kā jucekļa teksti. Tomēr jautrais koeficients atbildēs un metaforās ir kutelīgs. Atvainojiet, ja tas kādu aizvaino.

Null Pointer: rādītājs, kurā ir norādīta adrese, kurā nekas nav teikts vai teikts, ka NULL atrašanās vieta. Rakstīšana šajā vietā ir kļūda. Tas ir paredzēts, lai novērstu programmētāju nejaušu ierakstīšanu atmiņas vietā, kas varētu izraisīt segmentācijas traucējumus un / vai avāriju. Ideja bija vienmēr inicializēt rādītāju ar NULL un pirms rakstīšanas pārbaudīt, vai NULL nav. Apsveriet šo scenāriju:

int * p; // šobrīd šajā rādītājā ir nejauša adrese, tas var norādīt uz jebkuru vietu, pat ārpus segmenta

* p = 10; // tas noteikti piešķirs vainu.

drošs veids būtu kaut kas līdzīgs šim:

int * p = NULL;

ja (p! = NULL)

* p = 10;

Rāpojošais rādītājs: kā norāda nosaukums, rādītājs, kuram nav nozīmes, kur norādīt, kopš atmiņas bloks, uz kuru tas sākotnēji norādīja, tiek kaut kā atbrīvots.

Ir daudz dažādu iespēju, kā padarīt rādītāju paklanu. Visizplatītākais veids ir jauna, kopēšana un dzēšana

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

p = jauns x;

q = p;

dzēst q; // Gan q, gan atmiņas bloka rādītājs ar q tiek noņemts no atmiņas

// no šejienes mums ir rādītājs p, kura adrese nav atmiņā. Ja mēs mēģinām šim rādītājam piešķirt zināmu vērtību, mēs nonākam nepatikšanās, šeit ir ritošais rādītājs

* p = 10; // avārija

citi veidi, kā jūs, iespējams, nejauši izveidosit nokareno rādītāju, būtu veikt seklu objekta kopiju, vai nu piešķirot, vai nododot objektu metodei, tādējādi izmantojot kompilatora nodrošinātu kopiju konstruktoru, kurš atkal jums seklu kopiju.


Atbilde 5:

Es šeit redzu daudz "angļu", kas varētu būt noderīgi kādam, kurš jau zina šo jēdzienu, bet kādam, kurš to nedara, tas būs nekas cits kā jucekļa teksti. Tomēr jautrais koeficients atbildēs un metaforās ir kutelīgs. Atvainojiet, ja tas kādu aizvaino.

Null Pointer: rādītājs, kurā ir norādīta adrese, kurā nekas nav teikts vai teikts, ka NULL atrašanās vieta. Rakstīšana šajā vietā ir kļūda. Tas ir paredzēts, lai novērstu programmētāju nejaušu ierakstīšanu atmiņas vietā, kas varētu izraisīt segmentācijas traucējumus un / vai avāriju. Ideja bija vienmēr inicializēt rādītāju ar NULL un pirms rakstīšanas pārbaudīt, vai NULL nav. Apsveriet šo scenāriju:

int * p; // šobrīd šajā rādītājā ir nejauša adrese, tas var norādīt uz jebkuru vietu, pat ārpus segmenta

* p = 10; // tas noteikti piešķirs vainu.

drošs veids būtu kaut kas līdzīgs šim:

int * p = NULL;

ja (p! = NULL)

* p = 10;

Rāpojošais rādītājs: kā norāda nosaukums, rādītājs, kuram nav nozīmes, kur norādīt, kopš atmiņas bloks, uz kuru tas sākotnēji norādīja, tiek kaut kā atbrīvots.

Ir daudz dažādu iespēju, kā padarīt rādītāju paklanu. Visizplatītākais veids ir jauna, kopēšana un dzēšana

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

p = jauns x;

q = p;

dzēst q; // Gan q, gan atmiņas bloka rādītājs ar q tiek noņemts no atmiņas

// no šejienes mums ir rādītājs p, kura adrese nav atmiņā. Ja mēs mēģinām šim rādītājam piešķirt zināmu vērtību, mēs nonākam nepatikšanās, šeit ir ritošais rādītājs

* p = 10; // avārija

citi veidi, kā jūs, iespējams, nejauši izveidosit nokareno rādītāju, būtu veikt seklu objekta kopiju, vai nu piešķirot, vai nododot objektu metodei, tādējādi izmantojot kompilatora nodrošinātu kopiju konstruktoru, kurš atkal jums seklu kopiju.


Atbilde 6:

Es šeit redzu daudz "angļu", kas varētu būt noderīgi kādam, kurš jau zina šo jēdzienu, bet kādam, kurš to nedara, tas būs nekas cits kā jucekļa teksti. Tomēr jautrais koeficients atbildēs un metaforās ir kutelīgs. Atvainojiet, ja tas kādu aizvaino.

Null Pointer: rādītājs, kurā ir norādīta adrese, kurā nekas nav teikts vai teikts, ka NULL atrašanās vieta. Rakstīšana šajā vietā ir kļūda. Tas ir paredzēts, lai novērstu programmētāju nejaušu ierakstīšanu atmiņas vietā, kas varētu izraisīt segmentācijas traucējumus un / vai avāriju. Ideja bija vienmēr inicializēt rādītāju ar NULL un pirms rakstīšanas pārbaudīt, vai NULL nav. Apsveriet šo scenāriju:

int * p; // šobrīd šajā rādītājā ir nejauša adrese, tas var norādīt uz jebkuru vietu, pat ārpus segmenta

* p = 10; // tas noteikti piešķirs vainu.

drošs veids būtu kaut kas līdzīgs šim:

int * p = NULL;

ja (p! = NULL)

* p = 10;

Rāpojošais rādītājs: kā norāda nosaukums, rādītājs, kuram nav nozīmes, kur norādīt, kopš atmiņas bloks, uz kuru tas sākotnēji norādīja, tiek kaut kā atbrīvots.

Ir daudz dažādu iespēju, kā padarīt rādītāju paklanu. Visizplatītākais veids ir jauna, kopēšana un dzēšana

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

p = jauns x;

q = p;

dzēst q; // Gan q, gan atmiņas bloka rādītājs ar q tiek noņemts no atmiņas

// no šejienes mums ir rādītājs p, kura adrese nav atmiņā. Ja mēs mēģinām šim rādītājam piešķirt zināmu vērtību, mēs nonākam nepatikšanās, šeit ir ritošais rādītājs

* p = 10; // avārija

citi veidi, kā jūs, iespējams, nejauši izveidosit nokareno rādītāju, būtu veikt seklu objekta kopiju, vai nu piešķirot, vai nododot objektu metodei, tādējādi izmantojot kompilatora nodrošinātu kopiju konstruktoru, kurš atkal jums seklu kopiju.


Atbilde 7:

Es šeit redzu daudz "angļu", kas varētu būt noderīgi kādam, kurš jau zina šo jēdzienu, bet kādam, kurš to nedara, tas būs nekas cits kā jucekļa teksti. Tomēr jautrais koeficients atbildēs un metaforās ir kutelīgs. Atvainojiet, ja tas kādu aizvaino.

Null Pointer: rādītājs, kurā ir norādīta adrese, kurā nekas nav teikts vai teikts, ka NULL atrašanās vieta. Rakstīšana šajā vietā ir kļūda. Tas ir paredzēts, lai novērstu programmētāju nejaušu ierakstīšanu atmiņas vietā, kas varētu izraisīt segmentācijas traucējumus un / vai avāriju. Ideja bija vienmēr inicializēt rādītāju ar NULL un pirms rakstīšanas pārbaudīt, vai NULL nav. Apsveriet šo scenāriju:

int * p; // šobrīd šajā rādītājā ir nejauša adrese, tas var norādīt uz jebkuru vietu, pat ārpus segmenta

* p = 10; // tas noteikti piešķirs vainu.

drošs veids būtu kaut kas līdzīgs šim:

int * p = NULL;

ja (p! = NULL)

* p = 10;

Rāpojošais rādītājs: kā norāda nosaukums, rādītājs, kuram nav nozīmes, kur norādīt, kopš atmiņas bloks, uz kuru tas sākotnēji norādīja, tiek kaut kā atbrīvots.

Ir daudz dažādu iespēju, kā padarīt rādītāju paklanu. Visizplatītākais veids ir jauna, kopēšana un dzēšana

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

p = jauns x;

q = p;

dzēst q; // Gan q, gan atmiņas bloka rādītājs ar q tiek noņemts no atmiņas

// no šejienes mums ir rādītājs p, kura adrese nav atmiņā. Ja mēs mēģinām šim rādītājam piešķirt zināmu vērtību, mēs nonākam nepatikšanās, šeit ir ritošais rādītājs

* p = 10; // avārija

citi veidi, kā jūs, iespējams, nejauši izveidosit nokareno rādītāju, būtu veikt seklu objekta kopiju, vai nu piešķirot, vai nododot objektu metodei, tādējādi izmantojot kompilatora nodrošinātu kopiju konstruktoru, kurš atkal jums seklu kopiju.


Atbilde 8:

Es šeit redzu daudz "angļu", kas varētu būt noderīgi kādam, kurš jau zina šo jēdzienu, bet kādam, kurš to nedara, tas būs nekas cits kā jucekļa teksti. Tomēr jautrais koeficients atbildēs un metaforās ir kutelīgs. Atvainojiet, ja tas kādu aizvaino.

Null Pointer: rādītājs, kurā ir norādīta adrese, kurā nekas nav teikts vai teikts, ka NULL atrašanās vieta. Rakstīšana šajā vietā ir kļūda. Tas ir paredzēts, lai novērstu programmētāju nejaušu ierakstīšanu atmiņas vietā, kas varētu izraisīt segmentācijas traucējumus un / vai avāriju. Ideja bija vienmēr inicializēt rādītāju ar NULL un pirms rakstīšanas pārbaudīt, vai NULL nav. Apsveriet šo scenāriju:

int * p; // šobrīd šajā rādītājā ir nejauša adrese, tas var norādīt uz jebkuru vietu, pat ārpus segmenta

* p = 10; // tas noteikti piešķirs vainu.

drošs veids būtu kaut kas līdzīgs šim:

int * p = NULL;

ja (p! = NULL)

* p = 10;

Rāpojošais rādītājs: kā norāda nosaukums, rādītājs, kuram nav nozīmes, kur norādīt, kopš atmiņas bloks, uz kuru tas sākotnēji norādīja, tiek kaut kā atbrīvots.

Ir daudz dažādu iespēju, kā padarīt rādītāju paklanu. Visizplatītākais veids ir jauna, kopēšana un dzēšana

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

p = jauns x;

q = p;

dzēst q; // Gan q, gan atmiņas bloka rādītājs ar q tiek noņemts no atmiņas

// no šejienes mums ir rādītājs p, kura adrese nav atmiņā. Ja mēs mēģinām šim rādītājam piešķirt zināmu vērtību, mēs nonākam nepatikšanās, šeit ir ritošais rādītājs

* p = 10; // avārija

citi veidi, kā jūs, iespējams, nejauši izveidosit nokareno rādītāju, būtu veikt seklu objekta kopiju, vai nu piešķirot, vai nododot objektu metodei, tādējādi izmantojot kompilatora nodrošinātu kopiju konstruktoru, kurš atkal jums seklu kopiju.


Atbilde 9:

Es šeit redzu daudz "angļu", kas varētu būt noderīgi kādam, kurš jau zina šo jēdzienu, bet kādam, kurš to nedara, tas būs nekas cits kā jucekļa teksti. Tomēr jautrais koeficients atbildēs un metaforās ir kutelīgs. Atvainojiet, ja tas kādu aizvaino.

Null Pointer: rādītājs, kurā ir norādīta adrese, kurā nekas nav teikts vai teikts, ka NULL atrašanās vieta. Rakstīšana šajā vietā ir kļūda. Tas ir paredzēts, lai novērstu programmētāju nejaušu ierakstīšanu atmiņas vietā, kas varētu izraisīt segmentācijas traucējumus un / vai avāriju. Ideja bija vienmēr inicializēt rādītāju ar NULL un pirms rakstīšanas pārbaudīt, vai NULL nav. Apsveriet šo scenāriju:

int * p; // šobrīd šajā rādītājā ir nejauša adrese, tas var norādīt uz jebkuru vietu, pat ārpus segmenta

* p = 10; // tas noteikti piešķirs vainu.

drošs veids būtu kaut kas līdzīgs šim:

int * p = NULL;

ja (p! = NULL)

* p = 10;

Rāpojošais rādītājs: kā norāda nosaukums, rādītājs, kuram nav nozīmes, kur norādīt, kopš atmiņas bloks, uz kuru tas sākotnēji norādīja, tiek kaut kā atbrīvots.

Ir daudz dažādu iespēju, kā padarīt rādītāju paklanu. Visizplatītākais veids ir jauna, kopēšana un dzēšana

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

p = jauns x;

q = p;

dzēst q; // Gan q, gan atmiņas bloka rādītājs ar q tiek noņemts no atmiņas

// no šejienes mums ir rādītājs p, kura adrese nav atmiņā. Ja mēs mēģinām šim rādītājam piešķirt zināmu vērtību, mēs nonākam nepatikšanās, šeit ir ritošais rādītājs

* p = 10; // avārija

citi veidi, kā jūs, iespējams, nejauši izveidosit nokareno rādītāju, būtu veikt seklu objekta kopiju, vai nu piešķirot, vai nododot objektu metodei, tādējādi izmantojot kompilatora nodrošinātu kopiju konstruktoru, kurš atkal jums seklu kopiju.


Atbilde 10:

Es šeit redzu daudz "angļu", kas varētu būt noderīgi kādam, kurš jau zina šo jēdzienu, bet kādam, kurš to nedara, tas būs nekas cits kā jucekļa teksti. Tomēr jautrais koeficients atbildēs un metaforās ir kutelīgs. Atvainojiet, ja tas kādu aizvaino.

Null Pointer: rādītājs, kurā ir norādīta adrese, kurā nekas nav teikts vai teikts, ka NULL atrašanās vieta. Rakstīšana šajā vietā ir kļūda. Tas ir paredzēts, lai novērstu programmētāju nejaušu ierakstīšanu atmiņas vietā, kas varētu izraisīt segmentācijas traucējumus un / vai avāriju. Ideja bija vienmēr inicializēt rādītāju ar NULL un pirms rakstīšanas pārbaudīt, vai NULL nav. Apsveriet šo scenāriju:

int * p; // šobrīd šajā rādītājā ir nejauša adrese, tas var norādīt uz jebkuru vietu, pat ārpus segmenta

* p = 10; // tas noteikti piešķirs vainu.

drošs veids būtu kaut kas līdzīgs šim:

int * p = NULL;

ja (p! = NULL)

* p = 10;

Rāpojošais rādītājs: kā norāda nosaukums, rādītājs, kuram nav nozīmes, kur norādīt, kopš atmiņas bloks, uz kuru tas sākotnēji norādīja, tiek kaut kā atbrīvots.

Ir daudz dažādu iespēju, kā padarīt rādītāju paklanu. Visizplatītākais veids ir jauna, kopēšana un dzēšana

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

p = jauns x;

q = p;

dzēst q; // Gan q, gan atmiņas bloka rādītājs ar q tiek noņemts no atmiņas

// no šejienes mums ir rādītājs p, kura adrese nav atmiņā. Ja mēs mēģinām šim rādītājam piešķirt zināmu vērtību, mēs nonākam nepatikšanās, šeit ir ritošais rādītājs

* p = 10; // avārija

citi veidi, kā jūs, iespējams, nejauši izveidosit nokareno rādītāju, būtu veikt seklu objekta kopiju, vai nu piešķirot, vai nododot objektu metodei, tādējādi izmantojot kompilatora nodrošinātu kopiju konstruktoru, kurš atkal jums seklu kopiju.