Chinaunix

标题: 急问一个在函数内定义数组的简单问题 谢谢 [打印本页]

作者: richardzhang    时间: 2007-12-12 21:23
标题: 急问一个在函数内定义数组的简单问题 谢谢
我在一个函数如int a(int b)内定义了一个数组,double a[N][M],接着给数组a赋值,后来发现数组a赋值失败,请问为什么?如何解决?
难道在函数内不能直接定义数组并赋值吗?是不是要用malloc或者new,如果不能,为什么不能呢?
谢谢
作者: agaric    时间: 2007-12-12 21:23
必須定義時初始化. 而且你函數名和變量名一樣.
作者: richardzhang    时间: 2007-12-12 21:39
因为N和M是变量,如何在定义时初始化呢?
我的代码:
double  As[lNRA][lNCA];
for(iiii=0;iiii<lNRA;iiii++)
  for(jjjj=0;jjjj<lNCA;jjjj++)
As[iiii][jjjj]=coords[0]*dims[0]+iiii+coords[1]*dims[1]+jjjj);
结果没赋上值
很奇怪

[ 本帖最后由 richardzhang 于 2007-12-12 21:54 编辑 ]
作者: agaric    时间: 2007-12-12 22:17
呵呵, 既然代码出来了,为什么不调试一下看看呢?

通常数组得初始化就是按照内存里面存放顺序来书写,且只能初始化为常量。

比如 int a[3][2] = { {0,  1,  2},
                               {3, 4,  5 },
                            } ;
作者: richardzhang    时间: 2007-12-12 22:22
我犯了个小错误,刚发现
作者: agaric    时间: 2007-12-12 22:25
  我喜欢调试代码胜过看代码,你呢
作者: win_hate    时间: 2007-12-12 22:26
你至少也应该给出一段重现你错误的简短代码吧?就这么说,谁能猜出问题在哪里呢?

动态数组是 C99 所支持的,例子如下


  1. #include<stdio.h>

  2. int f(int n, int m)
  3. {
  4.         int i,j;
  5.         double a[n][m];

  6.         for (i=0; i<n; i++)
  7.                 for(j=0; j<m;j++)
  8.                         a[i][j]=0.1234;

  9.         for (i=0; i<n; i++)
  10.                 for(j=0; j<m;j++)
  11.                         printf("%f\n", a[i][j]);
  12. }

  13. int
  14. main ()
  15. {
  16.         f(3,4);
  17. }
复制代码

$ ./a.out
0.123400
0.123400
0.123400
0.123400
0.123400
0.123400
0.123400
0.123400
0.123400
0.123400
0.123400
0.123400

作者: agaric    时间: 2007-12-12 22:43
回楼上版主,为了保持俺程序得兼容性,俺仍然遵守 老得标准,是C89吧。
作者: win_hate    时间: 2007-12-12 23:14
原帖由 agaric 于 2007-12-12 22:43 发表
回楼上版主,为了保持俺程序得兼容性,俺仍然遵守 老得标准,是C89吧。


这算是尊老吗
作者: agaric    时间: 2007-12-12 23:17
俺是做嵌入式系统得,经常要根一些稀奇古怪得编译器打交道。 之前用得 东芝编译器还是纯dos程序,90年代初的东西,你说我敢不尊老吗?

不过现在也用上ARM了,用上ADS了,总算是鸟枪换炮了。强悍得编译器,不需要理由。
作者: xi2008wang    时间: 2007-12-12 23:30
原帖由 agaric 于 2007-12-12 22:25 发表
  我喜欢调试代码胜过看代码,你呢

强悍,向你学习!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2