Путаница с указателями и массивами - PullRequest
1 голос
/ 29 февраля 2012

Я пытаюсь понять указатели и массивы.Пытаясь найти указатели в Интернете (каламбур!), Я констатирую свое замешательство здесь ..

//my understanding of pointers
int d = 5; //variable d
int t = 6; //variable t

int* pd;   //pointer pd of integer type 
int* pt;   //pointer pd of integer type 

pd = &d;   //assign address of d to pd
pt = &t;   //assign address of d to pd

//*pd will print 5
//*pt will print 6

//My understanding of pointers and arrays

int x[] = {10,2,3,4,5,6};
int* px; //pointer of type int

px = x; //this is same as the below line
px = &x[0]; 
//*px[2] is the same as x[2]

Пока я понял.Теперь, когда я делаю следующее и когда я печатаю pd [0], он показывает что-то вроде -1078837816.Что здесь происходит?

pd[0] = (int)pt; 

Кто-нибудь может помочь?

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

int * pt; указатель на переменную типа integer, это не целое число Указывая (int) pt, вы указываете компилятору, что typecast pt должен быть целым числом.

Чтобы получить переменную в pt, вы используете * pt, это возвращает целочисленную переменную, на которую указывает адрес, сохраненный в pt.

Это немного сбивает с толку, так как вы говорите pd [0], а pd не является массивом.

1 голос
/ 29 февраля 2012

Вы сказали компилятору интерпретировать байты указателя pt, как если бы он был целым числом, так что вы получите, казалось бы, случайный результат, представляющий, где находится pt в памяти.

Я думаюВы хотите

pd[0] = pt[0] 

или

pd[0] = *pt;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...