一道指针的问题,高手请进。

来源:百度知道 编辑:UC知道 时间:2024/07/06 15:36:59
#include <stdio.h>

int main()
{
int a[10] = {4,5,6,7};
int (*p)[10] = &a;

printf("%x\n",*p);
printf("%x\n",*((int *)p));
}

为什么一个打印出来的是数组a的地址,一个打印出来的是a[0]的值呢?
只是进行了一次强制类型转换啊,应该不影响的。
08vino你好:
其实你的答案和我问的问题没有多大关系,或者说没答到点子上。
*((int *)p)和*(*p)是不一样的,再简化点(int *)p和*p是不一样的,前者只是进行了一次强制类型转换,后者是取p所指向的地址的值。

duduchang_2你好:你的答案更是越绕越乱。

这个问题我又想了一下,大致明白了:应该是强制类型转换的问题,把一个指向数组的指针转化成了指向整型的指针,所以会出现以上的结果。

楼主,我有测试了一下

确实()强制转换符有暂时把指针属性转换,行转列,列转行

谢谢楼主提示,呵呵

我把程序改了一下,楼主看看

int (*p)[10] = &a;
________
可以写成:
int p[][10] = &a;
_______
所以:
*p 就是&p[0] 为a的地址;
*((int*)p)) 就是 *(*p[0])为a的值;