张小艾 发表于 2020-5-26 17:30:18

关于数组和指针

#include<stdio.h>
float add(int (*p))
{
        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));//编译没问题,运行时这里报错_(:з」∠)_
                        }
                }
        }
        return Sum;

}
int main()
{
        int p;
        int i, j;
        float Sum;
        printf("输入3X3的数组:\n");
        for (i = 0;i < 3;i++) {
                for (j = 0;j < 3;j++) {
                        scanf("%d", &p);
                }
        }
        Sum = add(p);
        printf("Sum=%.2f", Sum);

}
3X3的矩阵,求矩阵的主对角线和副对角线之和,编译器:VS
帮帮忙看看是什么问题啊大佬(指针好鸡儿难_(:з」∠)_)

java2python 发表于 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))
{
      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+j);//编译没问题,运行时这里报错_(:з」∠)_
                        }
                }
      }
      return Sum;

}
int main()
{
      int p;
      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);
                        p = i*3+j;
                }
      }
      printf("%p,%p,%p\n",&p,&p,&p);
      printf("%p,%p,%p\n",&p,&p,&p);
      printf("%p,%p,%p\n",&p,&p,&p);
      printf("%p\n",&p);
      Sum = add(p);
      printf("Sum=%.2f", Sum);

      system("pause");
}

chxchxkkk 发表于 2020-5-26 18:32:34

Sum += *(p + i)); 如果不是复制粘贴的错误,这里多了个 ) 吧

张小艾 发表于 2020-5-27 00:41:24

chxchxkkk 发表于 2020-5-26 18:32
Sum += *(p + i)); 如果不是复制粘贴的错误,这里多了个 ) 吧

哦哦,这个是复制粘贴出错了,多谢

张小艾 发表于 2020-5-27 00:43:01

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

多谢啊{:10_257:}
页: [1]
查看完整版本: 关于数组和指针