|
5鱼币
- #include<stdio.h>
- float add(int (*p)[3])
- {
- int i, j;
- float Sum;
- for (i = 0;i < 3;i++) {
- for (j =0 ;j < 3;j++) {
- if (i = j||i+j==2) {
- Sum += *(p + i)[j]);//编译没问题,运行时这里报错_(:з」∠)_
- }
- }
- }
- return Sum;
- }
- int main()
- {
- int p[3][3];
- int i, j;
- float Sum;
- printf("输入3X3的数组:\n");
- for (i = 0;i < 3;i++) {
- for (j = 0;j < 3;j++) {
- scanf("%d", &p[i][j]);
- }
- }
- Sum = add(p);
- printf("Sum=%.2f", Sum);
- }
复制代码
3X3的矩阵,求矩阵的主对角线和副对角线之和,编译器:VS
帮帮忙看看是什么问题啊大佬(指针好鸡儿难_(:з」∠)_)
本帖最后由 java2python 于 2020-5-26 19:31 编辑
第八行:if (i = j||i+j==2) {
变成了赋值语句,死循环,难道不应该是i==j? 好像二维数组,应该用:*(p【i】+j)形式(中括号不能正常输出,只能用全角代替),p【i】是每一行的起始位置,这个指针+1,就是下一列的位置
*(p+1),实际就是下一行的位置,*(p+1)【1】,就是下一行的下一行,因为这两个操作全是一加就是一行,p+1只是把起始指针移到了第二行的开始
- #include<stdio.h>
- #include<windows.h>
- float add(int (*p)[3])
- {
- int i, j;
- float Sum=0;
- for (i = 0;i < 3;i++) {
- for (j =0 ;j < 3;j++) {
- if (i == j||i+j==2) {
- Sum += *(p[i]+j);//编译没问题,运行时这里报错_(:з」∠)_
- }
- }
- }
- return Sum;
- }
- int main()
- {
- int p[3][3];
- int i, j;
- float Sum;
- printf("输入3X3的数组:\n");
- for (i = 0;i < 3;i++) {
- for (j = 0;j < 3;j++) {
- //printf("p[%d][%d]=",i,j);
- //scanf("%d", &p[i][j]);
- p[i][j] = i*3+j;
- }
- }
- printf("%p,%p,%p\n",&p[0][0],&p[0][1],&p[0][2]);
- printf("%p,%p,%p\n",&p[1][0],&p[1][1],&p[1][2]);
- printf("%p,%p,%p\n",&p[2][0],&p[2][1],&p[2][2]);
- printf("%p\n",&p);
- Sum = add(p);
- printf("Sum=%.2f", Sum);
- system("pause");
- }
复制代码
|
最佳答案
查看完整内容
第八行:if (i = j||i+j==2) {
变成了赋值语句,死循环,难道不应该是i==j? 好像二维数组,应该用:*(p【i】+j)形式(中括号不能正常输出,只能用全角代替),p【i】是每一行的起始位置,这个指针+1,就是下一列的位置
*(p+1),实际就是下一行的位置,*(p+1)【1】,就是下一行的下一行,因为这两个操作全是一加就是一行,p+1只是把起始指针移到了第二行的开始
|