鱼C论坛

 找回密码
 立即注册
查看: 1098|回复: 4

[已解决]关于数组和指针

[复制链接]
发表于 2020-5-26 17:30:18 | 显示全部楼层 |阅读模式
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
帮帮忙看看是什么问题啊大佬(指针好鸡儿难_(:з」∠)_)
最佳答案
2020-5-26 17:30:19
本帖最后由 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只是把起始指针移到了第二行的开始
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-26 17:30:19 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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");
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-26 18:32:34 | 显示全部楼层
Sum += *(p + i)[j]); 如果不是复制粘贴的错误,这里多了个 ) 吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-27 00:41:24 | 显示全部楼层
chxchxkkk 发表于 2020-5-26 18:32
Sum += *(p + i)[j]); 如果不是复制粘贴的错误,这里多了个 ) 吧

哦哦,这个是复制粘贴出错了,多谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-27 00:43:01 | 显示全部楼层
java2python 发表于 2020-5-26 17:30
第八行:if (i = j||i+j==2) {
变成了赋值语句,死循环,难道不应该是i==j? 好像二维数组,应该用:*(p【 ...

多谢啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 02:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表