关于指向数组的指针初始化的问题,谢谢帮忙
VC++6.0下编译#include <stdio.h>
int main(void)
{
int (*fp)[10];
int num[10];
fp = num;//这里错在哪呢?
return 0;
}
编译器提示:
--------------------Configuration: Cpp2 - Win32 Debug--------------------
Compiling...
Cpp2.cpp
D:\c\Cpp2.cpp(6) : error C2440: '=' : cannot convert from 'int [10]' to 'int (*)[10]'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
执行 cl.exe 时出错.
Cpp2.obj - 1 error(s), 0 warning(s)
虽然num,&num可能在数值上没什么区别,不过语法通不过的。
改成 fp = #
To 2#,
你哪里看出来的这是VC?就因为是用VC6编译的? 看看错误提示,不说得很清楚吗?
不能把一个int[10]的数组赋值给一个指向同种类型的指针。 就好象这个样子:
int a = 10; int *b; b = a; 会报错一样。
其实最关键的就是,数组名在某种情况下,可以用作指向该数组的指针,但是并不代表它就是指向该数组的指针。 [quote][bo][un]界水乘风[/un] 在 2008-7-8 10:47 的发言:[/bo]
To 1#
虽然num,&num可能在数值上没什么区别,不过语法通不过的。
改成 fp = #
To 2#,
你哪里看出来的这是VC?就因为是用VC6编译的? [/quote]
#include <stdio.h>
int main(void)
{
int i;
int (*fp)[10];
int num[10];
fp = &num
for(i = 0;i < 10;i++)
num[i] = i;
for(i = 0;i <10;i++)
printf("%d ",num[i]);
printf("\n");
for(i = 0;i <10;i++)
printf("%d ",fp[i]);
return 0;
}
改成 fp = #后出现奇怪的数据
[attach]36087[/attach]
[[it] 本帖最后由 xxwpk007 于 2008-7-8 10:58 编辑 [/it]] 还要好好理解一下数组指针啊,呵呵。
printf("%d ",(*fp)[i]);
或者
printf("%d ",*(*fp+i)); fp[]是一个指针数组,每一个元素都是指针,而它的头地址,fp是指针的地址,你用fp=num当然不对了,恩,应该是fp=&num,就像fp是一个**而num只是*,当然不能赋值,fp[]里存的是地址,你打印出来的当然是地址了,就像楼上说的 要用** 不知道我说的对不,那个程序我在WINTC下编译通过了
,至于三楼说我哪儿看出是VC,我记得C注释用/* */吧,而VC好象是// 六楼说的对,FP[0]是数组NUM[]
的地址,而FP[1]则是跳过整个数组NUM[]后面的一个地址,FP[I],I每加一,则跳过10*INT,改写成以下就可以了
int main()
{
int i;
int (*fp)[10];
int num[10];
fp=#
for(i=0;i<10;i++)
num[i]= i;
for(i=0;i<10;i++)
printf("%d ",num[i]);
printf("\n");
for(i =0;i<10;i++)
printf("%d ",*(*fp+i));
getch();
} fp=num;也可以,在WINTC中编译,可以在num前不加& 程序我们注重思想,数据库我们注重原理,生活我们注重感情。07级程序&&数据库QQ交流群48335578,欢迎志士的加入 9楼正解!
(*FP)[10]是个行的数组,每循环一次都要跨过NUM[10];所以每次要加I!
呵呵!看了本帖,在看书,几小时才回答上来了!
注:如有什么不对的话,请各位见晾!本人也是个新手!呵呵! 指向数组的指针直接就是*p
(*p)[7] p为一个指向二维数组的指针 谢谢,LS的回答 现在终于搞懂了 13#说的有问题吧,(*p)[7]表示一个指针p指向一个数组,数组有7个元素才对吧 SL的错误,(*p)[7]这个是二维数组,而你说的只需要*p[7]这个就是一唯数组了!
页:
[1]
