求助一个行指针的问题
int a;//三行四列,每行有4个元素int (*p); //定义一个行指针
p = a;代表p指向数组a的第0行//若a+1,表示下一行
a,*a的区别
代码如上
书上没看懂
a,*a的区别 这个有啥区别,怎么分辨呢 本帖最后由 jackz007 于 2021-3-12 12:18 编辑
#include <stdio.h>
int main(void)
{
int a = {{1 ,2,3, 4} ,
{5 ,6,7, 8} ,
{9 , 10, 11 , 12}} ;
printf("a = %p , * a = %p , ** a = %p\n" , a , * a , ** a) ;
printf("a + 1 = %p , * a + 1 = %p , ** a + 1 = %p\n" , a + 1 , * a + 1 , ** a + 1) ;
}
运行实况
D:\0002.Exercise\C>g++ -o x x.c
D:\0002.Exercise\C>x
a = 0028FE90 , * a = 0028FE90 , ** a = 00000001
a + 1 = 0028FEA0 , * a + 1 = 0028FE94 , ** a + 1 = 00000002
D:\0002.Exercise\C>
从代码运行结果可以看出:
a 的内存地址是 0x0028FE90,a 和 * a 指向的都是 a 的首地址,但是,含义有所不同,a 是整个数组的首地址,* a 是第一行数据的起始地址,二者只是恰好相同, ** a 是数组的第一个元素 1;
a + 1 的内存地址是 0x0028FEA0,比 0x0028FE90 前进了 16 个字节,正好是 4 个 int 的存储空间,就是说,a + 1 指向下一行数据的起始地址;
* a + 1 的内存地址是 0x0028FE94,比 0x0028FE90 前进了 4 个字节,正好是 1 个 int 的存储空间,就是说,* a + 1 指向本行数据下一个元素的起始地址;
** a + 1 的值是 2,也就是 a + 1 的结果。 jackz007 发表于 2021-3-12 12:14
运行实况
从代码运行结果可以看出:
谢谢老哥 感觉有点奇怪,a本来是地址也是指针,之前的指针比如说指针p,然后变成*p这就代表指针的值。但是在行指针加上一个*还是指地址 a即是整个数组的首地址,又是第一行的地址吧
页:
[1]