鱼C论坛

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

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

[复制链接]
发表于 2020-5-26 17:30:18 | 显示全部楼层 |阅读模式
5鱼币
  1. #include<stdio.h>
  2. float add(int (*p)[3])
  3. {
  4.         int i, j;
  5.         float Sum;
  6.         for (i = 0;i < 3;i++) {
  7.                 for (j =0 ;j < 3;j++) {
  8.                         if (i = j||i+j==2) {
  9.                                 Sum += *(p + i)[j]);//编译没问题,运行时这里报错_(:з」∠)_
  10.                         }
  11.                 }
  12.         }
  13.         return Sum;

  14. }
  15. int main()
  16. {
  17.         int p[3][3];
  18.         int i, j;
  19.         float Sum;
  20.         printf("输入3X3的数组:\n");
  21.         for (i = 0;i < 3;i++) {
  22.                 for (j = 0;j < 3;j++) {
  23.                         scanf("%d", &p[i][j]);
  24.                 }
  25.         }
  26.         Sum = add(p);
  27.         printf("Sum=%.2f", Sum);

  28. }
复制代码

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只是把起始指针移到了第二行的开始
  1. #include<stdio.h>
  2. #include<windows.h>
  3. float add(int (*p)[3])
  4. {
  5.         int i, j;

  6.         float Sum=0;
  7.         for (i = 0;i < 3;i++) {
  8.                 for (j =0 ;j < 3;j++) {
  9.                         if (i == j||i+j==2) {
  10.                                 Sum += *(p[i]+j);//编译没问题,运行时这里报错_(:з」∠)_
  11.                         }
  12.                 }
  13.         }
  14.         return Sum;

  15. }
  16. int main()
  17. {
  18.         int p[3][3];
  19.         int i, j;
  20.         float Sum;
  21.         printf("输入3X3的数组:\n");
  22.         for (i = 0;i < 3;i++) {
  23.                 for (j = 0;j < 3;j++) {
  24.                         //printf("p[%d][%d]=",i,j);
  25.                         //scanf("%d", &p[i][j]);
  26.                         p[i][j] = i*3+j;
  27.                 }
  28.         }
  29.         printf("%p,%p,%p\n",&p[0][0],&p[0][1],&p[0][2]);
  30.         printf("%p,%p,%p\n",&p[1][0],&p[1][1],&p[1][2]);
  31.         printf("%p,%p,%p\n",&p[2][0],&p[2][1],&p[2][2]);
  32.         printf("%p\n",&p);
  33.         Sum = add(p);
  34.         printf("Sum=%.2f", Sum);

  35.         system("pause");
  36. }
复制代码

最佳答案

查看完整内容

第八行: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只是把起始指针移到了第二行的开始
  1. #include<stdio.h>
  2. #include<windows.h>
  3. float add(int (*p)[3])
  4. {
  5.         int i, j;

  6.         float Sum=0;
  7.         for (i = 0;i < 3;i++) {
  8.                 for (j =0 ;j < 3;j++) {
  9.                         if (i == j||i+j==2) {
  10.                                 Sum += *(p[i]+j);//编译没问题,运行时这里报错_(:з」∠)_
  11.                         }
  12.                 }
  13.         }
  14.         return Sum;

  15. }
  16. int main()
  17. {
  18.         int p[3][3];
  19.         int i, j;
  20.         float Sum;
  21.         printf("输入3X3的数组:\n");
  22.         for (i = 0;i < 3;i++) {
  23.                 for (j = 0;j < 3;j++) {
  24.                         //printf("p[%d][%d]=",i,j);
  25.                         //scanf("%d", &p[i][j]);
  26.                         p[i][j] = i*3+j;
  27.                 }
  28.         }
  29.         printf("%p,%p,%p\n",&p[0][0],&p[0][1],&p[0][2]);
  30.         printf("%p,%p,%p\n",&p[1][0],&p[1][1],&p[1][2]);
  31.         printf("%p,%p,%p\n",&p[2][0],&p[2][1],&p[2][2]);
  32.         printf("%p\n",&p);
  33.         Sum = add(p);
  34.         printf("Sum=%.2f", Sum);

  35.         system("pause");
  36. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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, 2024-5-9 02:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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