|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
int main()
{
int temp[5] = {1, 2, 3, 4, 5};
int (*p2)[5] = &temp;
int i;
for (i = 0; i < 5; i++)
{
printf("%d\n", *(*p2 + i));
}
return 0;
}
[fishc@localhost s1e23]$ gcc test4.c && ./a.out
1
2
3
4
5
为什么 *(*p2 + i)要取两次值,里面的取值是干嘛的????????
你认真看我写的回答了吗?你运行我给你写的这个程序了吗?
temp是一个数组,temp不是1,temp[0]才是1
与此类似,(*p2)[4]是个数组,p2不是元素的地址,*(p2+0)才是元素地址,*(*(p2+0)+0)才是元素的值
若是单个指针的话(假设定义了int *p=temp),那么p就是temp数组的首地址,*p就是temp[0]的值。
若是你还是不太理解的话,可以这样写:p2[0],这样写和*(p2+0)是一样的。
把我在二楼写的程序改正这种形式,运行结果是一样的
- #include <stdio.h>
- int main()
- {
- int temp[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
- int (*p2)[4]= &temp;
- int i,j;
- printf("%x\n",p2);
- for (i = 0; i < 3; i++)
- {
- printf("temp[%d]的地址是%x\n",i,p2[i]);
- for(j=0;j<4;j++)
- {
- printf("%x的值:",p2[i]+j);
- printf("%d\n", *(p2[i]+j));
- }
- }
- return 0;
- }
复制代码
|
|