@zhao4zhong1 这是人吗?我觉得就是水!
void main() { int a[5]={1,2,3,4,5}; int *ptr = (int *)(&a+1); printf("%d,%d",*(a+1),*(ptr-1)); } 问题出在红色的地方,a已经是地址了,对地址再取地址,你觉得得到什么东西?得到int**类型,即二维数组,将这二维数组+1,就是a[1][0]的地址,将这个地址减1,就是a[0][5],转化回来就是a[5]
#include <stdio.h> void main() { int a[5]={1,2,3,4,5}; int *ptr = (int *)(&a+1); printf("%d,%d",*(a+1),*(ptr-1)); } 这段程序调试出来的结果是2,5 2比较好理解,这个5的结果,能否详细讲解一下?谢谢
[quote=引用 8 楼 lovesmiles 的回复:] int** 这个说法可能过于随意,改成int[][]可能合适一点。将代码改成下面这样子你可能看得清晰一些
int** 这个说法可能过于随意,改成int[][]可能合适一点。将代码改成下面这样子你可能看得清晰一些
一楼的解答,我想了解下,一维数组和二维数组的对应关系,我这个一维数组,为什么是那样的对应关系?
[quote=引用 1 楼 lovesmiles 的回复:] a已经是地址了,对地址再取地址,你觉得得到什么东西?得到int**类型,即二维数组,将这二维数组+1,就是a[1][0]的地址,将这个地址减1,就是a[0][5],转化回来就是a[5]
# include <iostream> typedef int A[5]; void main() { A a ={1,2,3,4,5}; int *ptr = (int *)(&a+1); printf("%d,%d\n",*(a+1),*(ptr-1)); cout<<"&a="<<&a<<endl;// cout<<"&a+1="<<&a+1;//你认为这里面输出的值是比上面的输出多4而已吗? }
a已经是地址了,对地址再取地址,你觉得得到什么东西?得到int**类型,即二维数组,将这二维数组+1,就是a[1][0]的地址,将这个地址减1,就是a[0][5],转化回来就是a[5]
64,654
社区成员
250,484
社区内容
加载中
试试用AI创作助手写篇文章吧