指针和数组混淆

时间:2012-02-29 05:57:33

标签: arrays pointers

我试图理解指针和数组。在努力寻找在线指针(双关语!)之后,我在这里表达了我的困惑..

//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 个答案:

答案 0 :(得分:1)

你告诉编译器将指针pt的字节解释为int,因此你会得到一个看似随机的结果,表示pt碰巧位于内存中。

我想你想要

pd[0] = pt[0] 

pd[0] = *pt;

答案 1 :(得分:1)

int * pt;是指向整数类型变量的指针,它不是整数。通过指定(int)pt,您告诉编译器将类型转换为整数。

要在pt处获取变量,请使用* pt,这将返回存储在pt中的地址所指向的整数变量。

因为你说pd [0],而且pd不是数组,所以有点令人困惑。