菜鸟问题 请问怎么用数组指针?

pasud5 2001-11-25 02:04:07
我想在函数调用的时候定义一个指针变量指向一个多维数组请问我该怎么做?
int a[10];
int *p=a;

f1(p);
void __fastcall f1(int *p);
{
p[1]=100;
}

如上面这样会出错请问该怎样做?
不是指针数组是数组指针~~^-^谢谢
...全文
136 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
DeadWolf 2001-11-26
  • 打赏
  • 举报
回复
把这个声明放到在普通MFC程序里的H文件里
同样也可以
thomas269 2001-11-26
  • 打赏
  • 举报
回复
我上面話"亦沒法定義"是有些問題, 我亦試過 karma(无为) 的代碼是正確
pasud5 2001-11-26
  • 打赏
  • 举报
回复
我明白了,你是在Console 程序里面编译的,确实可以
但是把这个声明放到在普通MFC程序里的H文件里这样做就会说你
pasud5 2001-11-26
  • 打赏
  • 举报
回复
what cow(中文意译:什么牛,直译:我靠) 哈哈~~
不行啊~~,怎么搞的怪~~

DeadWolf 2001-11-26
  • 打赏
  • 举报
回复
CTESTDlg::Test(int (*p)[10])
{
int b;
b=p[1][2];

}

编译通过 运行也没问题
pasud5 2001-11-26
  • 打赏
  • 举报
回复
DeadWolf:

能给贴出实例吗?谢谢
karma 2001-11-25
  • 打赏
  • 举报
回复
did you compile it? it should work.
pasud5 2001-11-25
  • 打赏
  • 举报
回复
karma:
void __fastcall f1(int (*p)[10])
{
p[1][1]=100;
}

void main()
{
int a[10][10];
int (*p)[10]=a;

f1(p);
printf("%d\n",a[1][1]);
}
这样不行吧void __fastcall f1(int (*p)[10])
好像有问题~~
thomas269 2001-11-25
  • 打赏
  • 举报
回复
這樣當然錯啦, 在f1的參數p的declare根本就無任何維度(dimension)的declare, 所以p[1][1]根本就是錯.
假設:
int a[3][2] = {{1, 2}, {3, 4}, {5, 6}};
在內存中
&a[0][0] -> [1 2 3 4 5 6...]
如果有一個Pointer int *p;
p = &a[0][0] 或 p = a[0];(一樣的)
則 p -> [1 2 3 4 5 6...]
而 p[i * 2 + j] = a[i][j];
你有無發覺要用p引用a時, 必須要三個參數(i, 2, j), 而a[i][j]則只須(i, j), 這是因為編譯器知道a的維度定義, 而不知p的維度定義(根本無定義, 亦沒法定義)

karma 2001-11-25
  • 打赏
  • 举报
回复
of course, for
p[1][1] = 10;
p needs to be an int**, try this (although it is bad, since the first dimension is not passed into the function):

#include <stdio.h>
void __fastcall f1(int (*p)[10])
{
p[1][1]=100;
}

void main()
{
int a[10][10];
int (*p)[10]=a;

f1(p);
printf("%d\n",a[1][1]);
}
pasud5 2001-11-25
  • 打赏
  • 举报
回复
Sorry~~Sorry~~我漏了
应该是
这样
int a[10][10];
int *p=a;

f1(p);
void __fastcall f1(int *p)
{
p[1][1]=100;
}

编译出错~~~~
karma 2001-11-25
  • 打赏
  • 举报
回复
xiaospring(susu);
p[1] = 100; is same as *(p+1)=100;

pasud5(pasu), what compiler are you using?
jason802 2001-11-25
  • 打赏
  • 举报
回复
去掉那个分号,我就能编译通过,运行结果也是对的。
xiaospring 2001-11-25
  • 打赏
  • 举报
回复
*(p+1)=100;
pasud5 2001-11-25
  • 打赏
  • 举报
回复
不是那个问题!,就算没有;也会出错!
jason802 2001-11-25
  • 打赏
  • 举报
回复
void __fastcall f1(int *p)后面多了个“;”
karma 2001-11-25
  • 打赏
  • 举报
回复
you have an error at this line
void __fastcall f1(int *p); <==you have a ";" here, if you remove it, it will compile and it works as expected


16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧