有点问题修改了下
#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");
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)