C++问题,关于将数组地址赋给指针的问题。

请看下面代码:intarr[3]={1,2,3};int*p=arr;//合法p=&arr[0];//合法p=&arr;//错误提示:无法将int*[3]赋值给int*上... 请看下面代码:

int arr[3] = {1, 2, 3};
int *p = arr; //合法
p = &arr[0]; //合法
p = &arr; //错误提示:无法将 int * [3] 赋值给 int *
上面这行语句的问题提示的很明白,所要问的是:能否做到将 &arr 赋值给一个指针,如何做到?
展开
 我来答
龍__鳳
2013-09-17 · TA获得超过2346个赞
知道小有建树答主
回答量:948
采纳率:0%
帮助的人:1384万
展开全部
//可以定义一个指针,指向一个含3个元素的数组

#include <stdio.h>
int main()
{
int arr[3] = {1, 2, 3};
int *p = arr;                 //合法
p = &arr[0];                //合法
// p = &arr;                    //错误提示:无法将 int * [3] 赋值给 int *
int (*q)[3];
q = &arr;/////这里
printf("%d %d %d\n",(*q)[0],(*q)[1],(*q)[2]);
return 0;
}

追问
其实我的问题还包含另一层含义,请看:

int * pti = new int [3]; // pti指向 一个内存块,该内存块长度是3个int。
int arr[3];
pti = &arr; // Error!指针pti 与你的代码中指针 q 的区别在哪里?(解决了这个问题,我会加分,谢谢!)
追答
你的pti只是一个int型指针,是新分配的3个内存块的首元素地址,和&arr[0]是一样的
我的程序里面q是一个数组指针,指向的是一个含有3个int型元素的数组

int * pti = new int [3]; //指针 pti 一个内存块,长度3个int。
int arr[3]={1,2,3};
pti = (int *)&arr;///也可以强制转换
printf("%d",pti[0]);
你要明白&arr和&arr[0]是不同类型的指针
&arr是数组指针,指向一个数组,解引用后是一个数组的地址
&arr[0]只是普通的指针,指向一个int型对象
White_MouseYBZ
2013-09-17 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6339万
展开全部
伙计:用printf("%p %p\n",arr,&arr);看看结果,它们是同一个地址,说明它们作为指针时“值”是同一个。但arr是数组arr[]的首元素地址,也就是&arr[0];而&arr是数组arr[]的首地址,而不是“首元素”地址;它们的“值”一样,但“性质”不一样。如果有int arr[3] = {1, 2, 3},*p=arr,*q=&arr;,那么p+1指向“下一个元素”,即arr[1],而q+1指向了下一个数组,即a[3]的位置(假设有的话)。你可以

int arr[3] = {1, 2, 3},*p=arr,*q=&arr;
printf("%p,%p\n%p,%p\n",p,q,p+1,q+1);
看看结果就一目了然了……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
LLMTT7760860
2013-09-17 · 超过10用户采纳过TA的回答
知道答主
回答量:34
采纳率:0%
帮助的人:20.3万
展开全部
不能把,arr就是代表的地址值,怎么能把一个地址值在取地址呢,
arr[0]其实等价于*(arr+0)是(arr+0)地址处的值,在取地址&(*(arr+0))可以赋给p

如若答非所问,请忽略
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xoaxa
2013-09-17 · TA获得超过8607个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3391万
展开全部
arr本身就是指针,p也是指针,如果希望用p指向数组arr,只需p = arr即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
白羊打酱油
2013-09-17
知道答主
回答量:6
采纳率:0%
帮助的人:5579
展开全部
&的意思是取地址,而*的意思是从地址中取值。
比如说&arr[0]就是将值arr[0]的地址取出赋给指针p,而数组名arr本身就是内存地址,就不存在&arr的概念了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(10)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式