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 赋值给一个指针,如何做到? 展开
int arr[3] = {1, 2, 3};
int *p = arr; //合法
p = &arr[0]; //合法
p = &arr; //错误提示:无法将 int * [3] 赋值给 int *
上面这行语句的问题提示的很明白,所要问的是:能否做到将 &arr 赋值给一个指针,如何做到? 展开
12个回答
展开全部
追问
其实我的问题还包含另一层含义,请看:
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型对象
展开全部
伙计:用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);
看看结果就一目了然了……
int arr[3] = {1, 2, 3},*p=arr,*q=&arr;
printf("%p,%p\n%p,%p\n",p,q,p+1,q+1);
看看结果就一目了然了……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不能把,arr就是代表的地址值,怎么能把一个地址值在取地址呢,
arr[0]其实等价于*(arr+0)是(arr+0)地址处的值,在取地址&(*(arr+0))可以赋给p
如若答非所问,请忽略
arr[0]其实等价于*(arr+0)是(arr+0)地址处的值,在取地址&(*(arr+0))可以赋给p
如若答非所问,请忽略
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
arr本身就是指针,p也是指针,如果希望用p指向数组arr,只需p = arr即可。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
&的意思是取地址,而*的意思是从地址中取值。
比如说&arr[0]就是将值arr[0]的地址取出赋给指针p,而数组名arr本身就是内存地址,就不存在&arr的概念了
比如说&arr[0]就是将值arr[0]的地址取出赋给指针p,而数组名arr本身就是内存地址,就不存在&arr的概念了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询