急求~数组指针做函数参数问题!!! Thank you~~~~

急求~数组指针做函数参数问题!!! Thank you~~~~,第1张

有点问题修改了下

#include<stdioh>

void main()

{

int i,j;

long long unsigned int RES=1;

int a[3][4]={1,3,5,7,9,11,13,17,19,21,23,25};

for(i=0;i<3;i++)

for(j=0;j<4;j++)

RES=a[i][j];

printf("计算结果为:%lld\n",RES);

}

这说明你对指针理解还不够透彻。

int t;

还没有分配内存能拿来t = b么?

这个先不说,

b[3][2]是2维的数组,所以

int b[3][2]={{1,2},{1,2},{1,3}};

不仅自己方便辨认也对你的代码清晰有好处

至于你函数的传值,我不需要看你的函数就知道不行

因为b[3][2]这样的数组,可以看成3行和2列,也可以看成

3个指向2维数组的指针

但是函数传值的时候编译器可以figure out数组前面的那一维,但是不能知道后面那一组的大小,所以你要明确指明后面的大小,所以prototype里要写

int m[][a],a是一个值

至于内存分配,比如

我写个

int i, a;

a = 10;

i = a;

这个对么?明显不对,因为i是指针,没有分配过内存

我不是中文学的,所以表述有点不清,但是malloc和指针是比较有难度的,慢慢来

还有楼上那位兄弟写的挺好,这里提醒一下需要注意int t[n]和int (t)[n]相差甚远,所以留心。

今天看了一下发现俺对你的意思理解有点偏差,不好意思,

“指向指针的指针不是可以表示二维数组么?为什么传二维数组给m 报错”

指向指针的指针可以表示二维数组,前提是你要先分配内存

比如

int t;

t = (int )malloc(3sizeof(int ));

这样t就是一个含有3个指针的数组,

然后你再单独对每一个指针分配内存:

int i;

for(i = 0; i < 3; i++){

t[i] = (int )malloc(2sizeof(int));

}

这样t才可以看做二维数组,

而单单的int t仅仅是指向一个指向整数的指针。

所以你可以写

int t, ptr, a;

a = 10;

ptr = &a;

t = &ptr;

但是不能直接用作函数原型里作为2维数组传值的形参。

函数原型里要写作

void MatrixChain(int p,int n,int m[][6],int s[][6]);

这样传值才是对的,原因参见我前面讲的

这个就是解决方法

对于数组名作为参数传递,有两种方式:

1 使用数组名本身,如以下程序求数组a的最大值

#include <stdioh>

int max(int x[],int n) //作为数组定义形式

{

int i,m=x[0];

for(i=1;i<n;i++)

if(m<x[i]) m=x[i];

return m;

}

int main(void)

{

int a[5]={10,32,45,12,26};

int m;

m=max(a,5); //数组名用为实参

printf("a的最大值:%d\n",m);

return 0;

}

2用指针作为参数,这就简单了,如:

int max(int x,int n) //作为数组定义形式

{

int i,m=x[0];

for(i=1;i<n;i++)

if(m<x[i]) m=x[i];

return m;

}

int main(void)

{

int a[5]={10,32,45,12,26};

int m;

m=max(a,5); //数组名用为实参

printf("a的最大值:%d\n",m);

return 0;

}

两者结果一样

#include<iostream>

using namespace std;

const int LENGTH=10;

typedef int ARRAY[LENGTH];

void nsort(ARRAY parr,int n)

{

/重要说明

-----此处parr为指向一个存储了10个int型的数组的指针----

------用"typeid(parr)name()"检查的类型结果是"int ()[10]"

#=====若在代码"typedef int ARRAY[LENGTH]之后定义有:

#===="typedef ARRAY PARRAY"则此处写为PARRAY parr完全等价

-----------即parr的值是这个数组在内存中的地址----------

如果此处声明为int parr[10];则用"typeid(parr)name()"检查得到的

类型是"int [10]",这和之前的"int ()[10]"有着本质却别,前者实现的

功能是:可以动态确定二位数组的行数,而每一行有且只有10个int整型数据

本例可能不是你想要的,但相信看到这里你应该可以写出自己想要的程序了

/

int temp;

for(int i=0;i<n-1;i++)

{

for(int j=i+1;j<n;j++)

{

if((parr)[i]>(parr)[j])

{

temp=(parr)[i];

(parr)[i]=(parr)[j];

(parr)[j]=temp;

}

}

}

return;

}

void DispPArr(ARRAY parr,int n)

{

cout<<"(parr)={";

for(int i=0;i<10;i++)

{

if(i<9)

{

cout<<(parr)[i]<<",";

}

else{cout<<(parr)[i]<<"}"<<endl;}

}

return;

}

void main(void)

{

ARRAY arr={6,3,1,2,5,8,7,4,6,20};

ARRAY parr=&arr;

cout<<"parr是指向存储有10个int型数据的数组的指针"<<endl;

cout<<"排序前数组:"<<endl;

DispPArr(parr,10);

nsort(parr,10);//排序

cout<<"排序后数组:"<<endl;

DispPArr(parr,10);

system("echo 请按任意键继续&pause>nul");

}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/11666328.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存