
C语言: int a[5]; int * p = a[2]; 为什么p[0]可以访问,p[1]无法访问?
5个回答
展开全部
你好,我刚才在自己的电脑上试了一下。我们一句句分析吧。int a【5】,是定义一个数组,不知道你对它进行赋值没有。然后是第二句是有问题的。int*p是定义一个指针,也就是定义一个地址,可以这么说,但是你令这个地址等于a【2】,这时我想系统应该会提示你一个警告,翻译过来就是两者是不一样的变量,一个是地址,而另外一个是数值。两者不能建立相等关系,此赋值语句也就不成立。所以,我在自己电脑里测试的结果是p【0】也无法访问。所以,没有办法进行进一步的回答,有兴趣的话可以进行进一步的交流。
展开全部
首先,你这么写有问题,其次,真的有问题
int * p = a[2];这句就算能运行成功,也表示的是p指向的内容是a[2]的值,不是a[2]的地址,你要是这样之后访问⋯⋯可能已经内存溢出很危险了
int * p = &a[2];这么写才是取到地址
int * p = a[2];这句就算能运行成功,也表示的是p指向的内容是a[2]的值,不是a[2]的地址,你要是这样之后访问⋯⋯可能已经内存溢出很危险了
int * p = &a[2];这么写才是取到地址
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这样写编译不过,不可能把一个int 型赋给一个int *型
int *p = &a[2];
如果强制赋值应该 int *p = (int *)a[2]; 此时p指向的地址为a[2]的值
int *p = &a[2];
如果强制赋值应该 int *p = (int *)a[2]; 此时p指向的地址为a[2]的值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int *p=a[2]; 定义的时候已经出现问题了 这里是定义一个指针变量 地址为a[2]的值 不是a[2]的地址 这又何来数组啊
如果你想通过p来访问a[3]的话 应该是 int *p = &a[2]; 这样 *(p + 1)才是a[3]的
如果你想通过p来访问a[3]的话 应该是 int *p = &a[2]; 这样 *(p + 1)才是a[3]的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int a[5]; int * p = a[2];
这样都可以,没有提示任何警告???直接给一个指针赋地址,这个地址你知道上面有什么吗???
这样都可以,没有提示任何警告???直接给一个指针赋地址,这个地址你知道上面有什么吗???
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询