|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- int a[3][4];//三行四列,每行有4个元素
- int (*p)[4]; //定义一个行指针
- 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[3][4] = {{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[0][0] + 1 的结果。
|
|