数组指针
小甲鱼课后作业;p指针变量指向整个数组,
*(*(p+1)-6)
这里两个*什么意思呀{:5_104:}
一直没搞懂,大佬帮帮我
#include <stdio.h>
int main()
{
int array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int (*p) = &array;
printf("%d\n", *(*(p+1)-6));
return 0;
} 两次间访,第一次将行指针转化成列指针,再将 列指针 表达出来 你这个指针定义有问题,越界了,所以才用 -6 将指针拉回来。
(*p) 这样的定义,一般是针对二维数组而言,表明它拥有10个元素,p + i(注意是字母 i ,不是数字 1 ),就是让指针指向 i 行,*(p + i) 就是指向第 i 行,换句话说,就是将第 i 行的首地址赋给指针,*(p + i)+ j 就是指针指向了第 i 行的第 j 个元素,然后外面再用一个 * 表示取 *(p + i)+ j 这个地址的元素值,即 *(*(p + i)+ j ) 2302855560 发表于 2020-12-14 09:01
两次间访,第一次将行指针转化成列指针,再将 列指针 表达出来
不是线性的嘛{:7_119:} 风过无痕1989 发表于 2020-12-14 09:13
你这个指针定义有问题,越界了,所以才用 -6 将指针拉回来。
(*p) 这样的定义,一般是针对二维数组 ...
“p + i(注意是字母 i ,不是数字 1 ),就是让指针指向 i 行,*(p + i) 就是指向第 i 行”
这句话什么意思呀,没搞明白,{:10_324:}
*取址取的是什么呢 万千只cnm 发表于 2020-12-14 11:08
“p + i(注意是字母 i ,不是数字 1 ),就是让指针指向 i 行,*(p + i) 就是指向第 i 行”
这句话什 ...
int (*p) = 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) 风过无痕1989 发表于 2020-12-14 11:57
int (*p) = a;
1) p 指向数组 a 的开头,也即第 0 行;p + 1 前进一行,指向第 1 行。
哦哦 谢谢
那是不是p也可以换成数组名
--》a==*(*(a+i)+j) 万千只cnm 发表于 2020-12-14 13:15
哦哦 谢谢
那是不是p也可以换成数组名
--》a==*(*(a+i)+j)
对的 风过无痕1989 发表于 2020-12-14 13:56
对的
ok谢谢
页:
[1]