c语言中程序运行时遇到问题需要关闭,急啊!!

3*3矩阵转置程序编译通过,但运行时提示遇到问题需要关闭,大神拯救我
#include<stdio.h>int main(){ void change(int **q1,int **q2); int a[3][3],b[3][3],i,j,**p1,**p2; printf("请输入一个3乘3矩阵\n"); for(i=0;i<=2;i++) { scanf("%d %d %d",&a[i][0],&a[i][1],&a[i][2]); } p1=a; p2=b; change(p1,p2); for(i=0;i<=2;i++) for(j=0;j<=2;j++) { printf("%d ",b[i][j]); if((j+1)%3==0) {printf("\n");} } return 0;} void change(int **q1,int **q2) { int k,l; for(k=0;k<=2;k++) for(l=0;l<=2;l++) *(*(q2+l)+k)=*(*(q1+k)+l); }

#include<stdio.h>
void change(int q1[][3],int q2[][3])
{  
int k,l;  
for(k=0;k<=2;k++)  
for(l=0;l<=2;l++)  
*(*(q2+l)+k)=*(*(q1+k)+l);
}
int main()

void change(int q1[][3],int q2[][3]); 
int a[3][3],b[3][3],i,j,**p1,**p2; 
printf("请输入一个3乘3矩阵\n"); 
for(i=0;i<=2;i++) 
{  
scanf("%d %d %d",&a[i][0],&a[i][1],&a[i][2]); 

printf("矩阵转置为:\n");
change(a,b);
for(i=0;i<=2;i++) 
for(j=0;j<=2;j++) 
{   
printf("%d ",b[i][j]); 
if((j+1)%3==0)  
{
printf("\n");
}  
}  
return 0;
}

追问

我原来那个函数形参不可以用指针变量?为什么

追答

**p和a[][]类型不匹配
需要(*p)[3]才能和他的类型匹配

追问

二级指针跟行指针不一样吗?二维数组名应该属于行指针吧?为什么不可以用p=a?那什么时候才用到**p?大神见笑了,我是初学的,希望你别介意,我想弄明白O(∩_∩)O谢了!

追答

int **p;   //定义一个二级指针变量,它指向一个指针变量(它存的也是一个变量地址,只不过是一个指针变量的地址),你可以百度二级指针。上面说的很详细例如:

void main()
{
int k,*p,**pp;
k=8;
p=&k;
pp=&p;
printf("x=%d\n",**pp);//*pp=p,**pp=k=8
}

追问

a=&a[0];a[0]=&a[0][0]这正确吧?那也就是说a也是一个二级指针啊,为什么**p=a不正确?

追答

a=&a[0]不是正确 ,
a[0]=&a[0][0]也不是正确的
a代表的就是地址,你不可以修改他的地址值,只能修改该单元下的内容值

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-01-05
看到指针我就头大了,最开始学的时候还是不要乱用指针为好,把我做的给你。

#include <stdio.h> #include <math.h> #define n 3 void main() { int a[n][n]; int i,j; void swap(int a[n][n]) ; printf("请输入%d*%d矩阵:\n",n,n); for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&a[i][j]) ; swap(a); printf("矩阵转置为:\n"); for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%-2d",a[i][j]); printf("\n"); } } void swap(int a[n][n]) { int i,j; int k=0; for(i=0;i<n;i++) for(j=0;j<i;j++) { k=a[i][j]; a[i][j]=a[j][i]; a[j][i]=k; } }追问

我只是想搞明白错在哪里,不过还是谢谢你

c语言出现了一个问题,导致程序停止正常工作,请关闭程序
1、野指针,你使用的指针指向未知区域 2、scanf函数输入整形、字符……的时候缺少了& 3、缓冲区溢出,也就是说你使用数组时不经意间越界了

C语言程序运行后 出现exe停止工作 为什么呢?
C语言程序运行出现exe停止工作的原因是因为内存溢出和编译器错误。第一种:内存溢出 内存溢出(out of memory)通俗理解就是内存不够,程序所需要的内存远远超出了主机内安装的内存所承受大小,就叫内存溢出。系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软...

C语言 程序运行到一半告诉我出现一个问题导致程序停止工作
另外,你的程序必须当做C++程序编译,否则通不过。C不允许在有实质语句之后定义变量,变量说明要全部放到相应段的最前面,也不支持\/\/注释。我是用DEVC++编译成功的,用WINTC编译失败。

请问我这个C语言程序为何编译无错 但是一打开就提示有错误需要关闭呢...
if (*(p+i)<*(p+i+1))\/\/在这个被调函数中你的*p未赋值就在引用,是野指针。{ t=*(p+i);

...R) Develepor Studio遇到问需要关闭”,这是怎么了?
如果是所有的程序都有问题,就是你的编译软件出问题了,检查是否和其他软件冲突或者软件本身有问题或者文件被破坏。

C语言程序运行出错~求帮助~
这在C++(VC 和 VS)环境下出现的错误,请保存现有代码,然后关闭空间,而后再打开已保存的代码,重新编译运行即可。原因是,在C++中,允许多文件模式,新添加的代码总是默认与以前(现有的)代码是同一个程序所属的,你可能已经注意到,代码名称已经从cpp1.cpp,改变为cpp2.cpp了。

C语言里程序编译无误但运行会弹出程序已停止运行是为什么
造成程序停止运行弹框出错的可能原因如下:内存溢出 内存溢出(out of memory)通俗理解就是内存不够,程序所需要的内存远远超出了主机内安装的内存所承受大小,就叫内存溢出。系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件 造成内存溢出的原因可能有:1...

c语言编写的求阶乘的程序为什么一运行就出现程序错误,需要关闭
因为在程序代码中使用了中文,所以这个程序如果不在中文DOS下运行,可能会出现乱码,但不影响程序的计算结果。注:因为DOS能访问的内存有限,所以在DOS下可把计算结果扩充到30000多位。但如果用VC把它编绎成Windows程序,则可以计算到“真正的无穷多位”(与机子配置有关),一般计算到几十万位是没有问...

c语言运行时显示:出现了一个问题导致程序停止正常工作
int i,j;\/\/[6][6]不是【7】【6】int grade[6][6]={80,90,75,82,0,0,90,75,88,95,0,0,68,78,88,82,0,0,72,85,63,86,0,0,95,88,90,85,0,0};char name[5][10]={"李一","成红","王强","张一","席二"};...

C语言程序运行时显示编程.exe停止工作,怎么办?
这种情况叫做 runtime error (运行时错误)。请按照结尾的五条提示找出代码中的错误,改正后就没问题了。在 Windows 7 上这样提示:在 Windows XP 上这样提示:runtime error (运行时错误)就是程序运行到一半,程序就崩溃了。比如说:①除以零 ②数组越界:int a[3]; a[10000000]=10;③指针...

相似回答