马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
小甲鱼课后作业;
p指针变量指向整个数组,
*(*(p+1)-6)
这里两个*什么意思呀
一直没搞懂,大佬帮帮我
#include <stdio.h>
int main()
{
int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int (*p)[10] = &array;
printf("%d\n", *(*(p+1)-6));
return 0;
}
int (*p)[4] = a;
1) p 指向数组 a 的开头,也即第 0 行;p + 1 前进一行,指向第 1 行。
2) *(p + 1) 表示取地址上的数据,也就是整个第 1 行数据。注意是一行数据,是多个数据,不是第 1 行中的第 0 个元素。
3) *(p + 1) + 1 表示第 1 行第 1 个元素的地址。如何理解呢?
*(p + 1) 单独使用时表示的是第 1 行数据,放在表达式中会被转换为第 1 行数据的首地址,也就是第 1 行第 0 个元素的地址,因为使用整行数据没有实际的含义,编译器遇到这种情况都会转换为指向该行第 0 个元素的指针;
4) *(*(p + 1) + 1)表示第 1 行第 1 个元素的值。很明显,增加一个 * 表示取地址上的数据。
5) 上面的明白了,我们再来看对于第 i 行第 j 列,即 a[ i ][ j ] 列的表示就可以写成:*(p + i) + j,要取这个单元的元素值,就再在前面加一个 * 号:*(*(p + i) + j)
|