作者tarantula (不要改我昵称)
看板C_and_CPP
标题[问题] cannot convert int (*)[size] to int*
时间Tue May 17 15:33:27 2022
开发平台(Platform): (Ex: Win10, Linux, ...)
win7
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
Dev C++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
[Error] cannot convert 'int (*)[size]' to 'int*' in assignment
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
[Error] cannot convert 'int (*)[size]' to 'int*' in assignment
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
int main()
{
int i,a[5] = {32,16,9,7,0};
cout<<"a = "<<a<<endl;
cout<<"&a = "<<&a<<endl;
cout<<"&a[0] = "<<&a[0]<<endl;
int sum = 0;
sum = 0;
int *ptr;
ptr = &a; // why this is not acceptable
// ptr = &a[0];
// ptr = a;
for(i = 0;i<5;i++)
{
sum += *ptr;
ptr += 1;
}
return 0;
}
补充说明(Supplement):
ptr = &a; // why this is not acceptable
// ptr = &a[0];
// ptr = a;
只有第一行给出错误讯息,後两行都可以,但我不明白为什麽,
从上面print out 的结果看起来
a == &a == &a[0]
如果是单个变数 int *ptr= &a; 给过
不明白为什麽阵列a不能。
谢谢解说 感恩
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 98.149.118.248 (美国)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1652772812.A.76D.html
1F:推 mikemike1021: &a 是 int** 吧? 05/17 15:41
2F:推 Friend5566: 如果开的变数是阵列a[5] a跟&a[0]是pointer &a则是 05/17 16:19
3F:→ Friend5566: double pointer 05/17 16:19
4F:推 g0010726: 因为&a是指向一个阵列的pointer,跟int* 05/17 16:22
5F:→ g0010726: 一个指向int的pointer 型态不相容,没法自动转换。 05/17 16:23
6F:→ g0010726: 纯粹两个位址相同不代表可以直接assign 05/17 16:23
7F:→ g0010726: 其实错误讯息很清楚了 就是型态无法转换 05/17 16:23
8F:→ g0010726: 另外楼上讲的不太正确 &a 的型态是 int (*)[5] 05/17 16:27
9F:→ g0010726: 指的是 a pointer (*) to an array [] of size 5 05/17 16:27
10F:→ g0010726: containing integers 并不是什麽 05/17 16:27
11F:→ g0010726: pointer to pointer (**) 05/17 16:27
12F:→ tarantula: 谢谢大家解惑。跪 05/17 16:39
13F:→ Lipraxde: 推荐个网站:cdecl.org 05/17 16:54
14F:嘘 simon860730: 红明显 借问一下 什麽是double pointer ?_? 05/21 14:43
15F:推 OnlyRD: 怎麽会是&a?a = int [5] , &a 当然变成 pointer t 05/21 16:32
16F:→ OnlyRD: o array of in 05/21 16:32
17F:→ OnlyRD: t , 隐式转型成int** . 去把 right-left rule 看一 05/21 16:32
18F:→ OnlyRD: 遍,就全部搞 05/21 16:32
19F:→ OnlyRD: 懂了。 05/21 16:32
20F:推 OnlyRD: 如果要更进一步计较int** or int[5]* ,会在templa 05/21 16:37
21F:→ OnlyRD: te里面考虑, 05/21 16:37
22F:→ OnlyRD: 有可能需要decay出场,否则在指标操作上,考虑隐式 05/21 16:37
23F:→ OnlyRD: 转换就好了。 05/21 16:37