我试图理解指针和数组。在努力寻找在线指针(双关语!)之后,我在这里表达了我的困惑..
//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;
有人可以帮忙吗?
答案 0 :(得分:1)
你告诉编译器将指针pt的字节解释为int,因此你会得到一个看似随机的结果,表示pt碰巧位于内存中。
我想你想要
pd[0] = pt[0]
或
pd[0] = *pt;
答案 1 :(得分:1)
int * pt;是指向整数类型变量的指针,它不是整数。通过指定(int)pt,您告诉编译器将类型转换为整数。
要在pt处获取变量,请使用* pt,这将返回存储在pt中的地址所指向的整数变量。
因为你说pd [0],而且pd不是数组,所以有点令人困惑。