亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪問板塊 發(fā)新帖
查看: 4346 | 回復(fù): 15
打印 上一主題 下一主題

[C] 剛學(xué)完c。求教,自寫一小程序不知道錯(cuò)哪里。一直遵循努力自己解決問題的原則。但。。 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2013-12-16 23:19 |只看該作者 |倒序?yàn)g覽
#include<stdio.h>
                                                                  //我的目的是輸入i個(gè)學(xué)生成績(jī)(每個(gè)學(xué)生4門成績(jī));然后一個(gè)一個(gè)的輸出各學(xué)生的平均
void average(float *p,int x,int y);        // 成績(jī),然后輸出所有學(xué)生的所有成績(jī)。
void search(float (*p)[4],int x,int y);   //(×p)是指向一維數(shù)組的指針變量                       

int main()
{       
        int j=0;
        int i=0;
        int student=0;
        float score[i][4];
        float (*p)[4]=NULL;

        printf("請(qǐng)輸入學(xué)生人數(shù):\n");
        scanf("%d",&student);

        printf("你輸入的學(xué)生人數(shù)是:%d\n",student);
       
        printf("請(qǐng)輸入學(xué)生成績(jī):\n");
       
        p=score;
        for(i=0;i<student;i++)
                for(j=0;j<4;j++)
                           scanf("%f",*(p+i)+j);                   //&(*(*(p+i)+j)))
       
        average(*p,student,4);
        search(p,student,4);

        return 0;
       
}
       
void average(float *p,int x,int y)
{
        float aver=0;
        int i=0;
        int j=0;
        float sum=0;

        for(i=0;i<x;i++)
          {     
                sum=0;
                 for(j=0;j<y;j++)
                  {
                        sum=sum+*p;
                  }
                aver=sum/y;
                printf("\n第%d個(gè)同學(xué)的平均成績(jī)?yōu)椋?5.2f\n",i,aver);
          }
}


void search(float (*p)[4],int x,int y)
{
        int i=0;
        int j=0;
        float fenshu=0;
       
        for(i=0;i<x;i++)
          {       
                printf("\n第%d個(gè)同學(xué)各科成績(jī):\n",i);
                for(j=0;j<y;j++)
                  {
                           fenshu=*(*(p+i)+j);
                        printf("%5.2f",fenshu);       
                  }
          }       
       
}

論壇徽章:
1
處女座
日期:2014-09-18 16:18:00
2 [報(bào)告]
發(fā)表于 2013-12-17 09:01 |只看該作者
回復(fù) 1# 。風(fēng)中勁草。
沒仔細(xì)看你的代碼,不知道你具體有什么問題,但是很明顯有一點(diǎn)錯(cuò)誤,我看你申請(qǐng)數(shù)組的時(shí)候score[4],我想你的意圖應(yīng)該是根據(jù)學(xué)生的總數(shù)來動(dòng)態(tài)申請(qǐng)數(shù)組大小吧,4應(yīng)該是一個(gè)學(xué)生有4門成績(jī)?
那你這樣做是不對(duì)的,因?yàn)槟愕膇初始化為0,那么你可以理解為實(shí)際上申請(qǐng)的數(shù)組大小就是一個(gè)1行4列的矩陣,假設(shè)你的學(xué)生總數(shù)>1,那么你從*p地址開始填寫內(nèi)存的時(shí)候,就會(huì)溢出,也就時(shí)你填寫了你并沒有申請(qǐng)的地址空間,這是嚴(yán)重錯(cuò)誤的。一般動(dòng)態(tài)申請(qǐng)數(shù)組使用malloc函數(shù),你可以去查一下。

   

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2013-12-17 11:05 |只看該作者
float score[i][4];  // 聲明數(shù)組長(zhǎng)度不能用變量

void search(float (*p)[4],int x,int y);   //(×p)是指向一維數(shù)組的指針變量
通常用2級(jí)指針 float **p

看編譯器的提示改

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2013-12-17 11:19 |只看該作者
本帖最后由 dxyf1524 于 2013-12-17 11:23 編輯

        float score[4];
        float (*p)[4]=NULL;
你換個(gè)方法做個(gè)吧,不知道你的編譯怎么通過的,
用指針數(shù)組比較復(fù)雜,考慮簡(jiǎn)單的方法吧
實(shí)在不行,用結(jié)構(gòu)體

論壇徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辭舊歲徽章
日期:2015-03-03 16:54:152015年亞洲杯之約旦
日期:2015-02-11 14:38:37雙魚座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29雙子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亞洲杯之科威特
日期:2015-04-17 16:51:51
5 [報(bào)告]
發(fā)表于 2013-12-17 11:42 |只看該作者
To 3樓、4樓:怎么通過的?當(dāng)然是用gcc啊,不然這么神奇的語(yǔ)法。。。
To 2樓:float score[0][4];  聲明的是0行4列的數(shù)組,也就是沒分配任何空間。

To 樓主:
過去,C語(yǔ)言中是沒法聲明一個(gè)變量長(zhǎng)度的數(shù)組的。后來在C99標(biāo)準(zhǔn)中添加了這個(gè)特性,而gcc默認(rèn)情況下(不是用-std=c99)就支持這個(gè)特性。當(dāng)然,長(zhǎng)度為0的數(shù)組也是一個(gè)gcc的擴(kuò)展。下面兩個(gè)鏈接作為參考:

http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html
http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html


需要注意的是,雖然你可以聲明一個(gè)變量長(zhǎng)度的數(shù)組,但是這個(gè)數(shù)組的長(zhǎng)度不會(huì)隨著這個(gè)變量的變化而變化,而是在聲明之后就固定下來了。所以,下面的語(yǔ)句:
  1.          int j=0;
  2.         int i=0;
  3.         int student=0;
  4.         float score[i][4];
復(fù)制代碼
score是個(gè)長(zhǎng)度為0的數(shù)組,它實(shí)際上不占任何空間,所以向里面存東西是錯(cuò)誤的,會(huì)溢出。

正確的做法:
1. 取得學(xué)生人數(shù)后再聲明score,不是一個(gè)好方法。
2. 學(xué)習(xí)使用malloc/free函數(shù),自己分配內(nèi)存。

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
6 [報(bào)告]
發(fā)表于 2013-12-17 14:26 |只看該作者
還有:

你定義P為指針:float (*p)[4]=NULL;
然后你這里用:scanf("%f",*(p+i)+j);
你想想p為地址,*(p+i)之后還是地址嗎?不是地址你還可以用來放在scanf中做參數(shù)嗎?

論壇徽章:
1
處女座
日期:2014-09-18 16:18:00
7 [報(bào)告]
發(fā)表于 2013-12-17 14:33 |只看該作者
回復(fù) 5# zhaohongjian000
額,大早起來腦袋有點(diǎn)暈,索引開始和數(shù)組長(zhǎng)度居然弄暈了,你說的是對(duì)的,其實(shí)沒有分配任何空間。
這個(gè)地址確實(shí)是可以用的,但是寫到哪里就不得而知了,會(huì)損壞什么關(guān)鍵數(shù)據(jù)也不得而知了。
to樓上,*(p+i)當(dāng)然是地址,因?yàn)檫@里p本身是一個(gè)二級(jí)指針,但是是一個(gè)沒有被內(nèi)核分配給該進(jìn)程的地址,換句話說就是在操作一個(gè)非法空間,gcc編譯也是可以通過的,甚至得到結(jié)果都有可能正確,但是做法顯然是錯(cuò)誤的

   

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
8 [報(bào)告]
發(fā)表于 2013-12-17 15:05 |只看該作者
回復(fù) 7# Kasiotao


    不聽我的話,你還是自己寫個(gè)程序試一下吧,你這里定義p就是一級(jí)指針。不想解釋了。

論壇徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辭舊歲徽章
日期:2015-03-03 16:54:152015年亞洲杯之約旦
日期:2015-02-11 14:38:37雙魚座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29雙子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亞洲杯之科威特
日期:2015-04-17 16:51:51
9 [報(bào)告]
發(fā)表于 2013-12-17 15:19 |只看該作者
回復(fù) 8# ntwarren


    我覺得你才需要寫個(gè)程序試一下。

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
10 [報(bào)告]
發(fā)表于 2013-12-17 15:36 |只看該作者
回復(fù) 9# zhaohongjian000

#include <stdio.h>
#include <stdlib.h>

int main(){
    int a[8][10] = {4};
    int (*p)[4];
    p = a;
   

    printf("%d\n",*((int*)p));
    printf("%d\n",a[0][0]);

}



   
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP