Zichenya 发表于 2020-5-12 22:32:07

这是什么意思

#include<stdio.h>
main()
{
int a={1,2,3,4,5},*p=(int *)(&a+1);
printf("%d",*(p-1));}

这个程序*p=(int *)(&a+1);这句什么意思?

ba21 发表于 2020-5-12 22:41:08

int *p;
p =(强转成int型指针) (a的地址+1)

Zichenya 发表于 2020-5-13 10:17:54

ba21 发表于 2020-5-12 22:41
int *p;
p =(强转成int型指针) (a的地址+1)

定义了int型数组a为什么a+1的地址还要强制转换?

鱼京 发表于 2020-5-13 10:21:01

int *p = (int *)(&a+1) :
就是你定义了一个int 型的指针,而且把这个指针指向了 &a+1 的地址,这个(int *)的意思是将(&a+1)强制转换成一个int 型的指针,这样的话,前面也就可以理解成:指针p指向了另一个指针(*int)(&a+1)
上面的代码还可以写成这样:
int*p = &a+1;
后面你输出的那个*(p-1) == *(&a+1-1) == *(&a),所以输出结果为:5

Zichenya 发表于 2020-5-13 12:28:59

鱼京 发表于 2020-5-13 10:21
int *p = (int *)(&a+1) :
就是你定义了一个int 型的指针,而且把这个指针指向了 &a+1 的地址,这个(int...

我想知道,定义的a数组已经是int型的,为什么不能把&a+1的地址直接赋给p,而要强制转换。

ba21 发表于 2020-5-13 15:00:11

Zichenya 发表于 2020-5-13 10:17
定义了int型数组a为什么a+1的地址还要强制转换?

那你说 说你的理由,为什么不要强转?

jkluoling1992 发表于 2020-5-14 00:10:41

这题目在哪本书看到的?
页: [1]
查看完整版本: 这是什么意思