12.2晚上

#include<stdio.h>
#include<stdlib.h>
#define SIZE 4
#define SIZES 10
#define ROWS 3
#define COLS 4 

int sum(int ar[],int n);
int sump(int*start,int *end); 
void show_array(const double ar[],int n);
void mult_array(double ar[],int n,double mult);
void sum_rows(int ar[][COLS],int rows);
void sum_cols(int [][COLS],int);
int sum2d(int(*ar)[COLS],int rows);

int main()
{
    /* day_mon2.c---让编译器计算元素的个数*/ 
/*    const int days[]={31,28,31,30,31,30,31,31,30,31};
    int index;
    for(index=0;index<sizeof days/ sizeof days[0];index++)
        printf("Month %2d has %d days.\n",index+1,days[index]);*/
        
        
        
        
        
        
    //pnt_add.c---指针地址
/*    short dates[SIZE];
    short *pti;
    short index;
    double bills[SIZE];
    double *ptf;
    pti =dates;
    ptf =bills;
    printf("%23s %15s\n","short","double");
    for(index=0;index<SIZE;index++)
        printf("pointers+%d: %10p %10p\n",index,pti+index,ptf+index);*/
        
        
        
        
        
    //sum_arr1.c---数组元素之和
     /*int marbles[SIZES]={20,10,5,39,4,16,19,26,31,20};
     long answer;
     answer=sum(marbles,SIZES);
     printf("The total number of marbles is %ld.\n",answer);    //【int*SIZES=40,所以该数组就是40个字节】 
     printf("The size of marbles is %lu bytes.\n",sizeof marbles);     
     
     
     
     
     
          /*sum_arr2.c---数组元素的和*/
      /*int marbles[SIZES]={20,10,5,39,4,16,19,26,31,20,};
      long answer;
      answer=sump(marbles,marbles+SIZES);
      printf("The total number of marbles is %ld.\n",answer); /*我的编译器不支持这种写法*/
      
      
      
      
      
    /*order.c---指针运算中的优先级*/
/*    int data[2]={100,200};
    int moredata[2]={300,400};
    int *p1,*p2,*p3;
    p1=p2=data;
    p3=moredata;
    printf("*p1=%d, *p2=%d, *p3=%d\n",*p1,*p2,*p3);
    printf("*p1++=%d,  *++p2=%d, (*p3)++=%d\n",*p1++,*++p2,(*p3)++);
    printf("*p1=%d, *p2=%d,  *p3=%d\n",*p1,*p2,*p3);//「相当于*p1先输出值再把地址加1,*p2把地址加1再输出值,*p3是先输出值,再把值加1』
    
    
    
    
    
    /*指针的八种操作*/
    /* int urn[5]={100,200,300,400,500};
     int *ptr1,*ptr2,*ptr3;
     
     ptr1=urn;            //把一个地址赋给指针 
     ptr2=&urn[2];        //把一个地址赋给指针 
                         //解引用指针,以及获得指针的地址 
     printf("pointer value, dereferenced pointer, pointer address:\n");
     printf("ptr1=%#p , *ptr1=%#d , &ptr1=%#p\n",ptr1,*ptr1,&ptr1);//「指针ptr1指向的是数组的首地址,但数&ptr指向的是指针本身的地址,说明指针本身是有地址」
     
     //指针加法
     ptr3=ptr1+4;
     printf("\nadding an int to a pointer:\n");
     printf("ptr1+4=%#p, *(ptr1+4)=%d\n",ptr1+4,*(ptr1+4)); 
     ptr1++;            //递增指针 
     printf("\nvalues after ptr1++:\n");
     printf("ptr1=%#p, *ptr1=%d, &ptr1=%#p",ptr1,*ptr1,&ptr1);
     ptr2--;            //递减指针 
     printf("\nvalues after --ptr2:\n");
     printf("ptr2=%#p,*ptr2=%d,&ptr2=%#p\n",ptr2,*ptr2,&ptr2);
     --ptr1;            //恢复初始值 
     ++ptr2;            //恢复初始值 
     printf("\n Pointers reset to original values:\n");
     printf("ptr1=%#p,ptr2=%#p\n",ptr1,ptr2);
     //一个指针减去另一个指针
     printf("\nsubtracting one pointer from another\n");
     printf("ptr2=%#p, ptr1=%#p , ptr2-ptr1=%td\n",ptr2,ptr1,ptr2-ptr1);
     //一个指针减去一个整数
     printf("\nsubtracting an int from a pointer:\n");
     printf("ptr3=%#p,ptr3-2=%#p\n",ptr3,ptr3-2);*/
      
     
     
     
     
     //arf.c---处理数组的函数*/
/*    double dip[SIZE]={20.0,17.66,8.2,15.3};
    printf("The original dip array:\n");
    show_array(dip,SIZE);
    mult_array(dip,SIZE,2.5);
    printf("The dip array after calling mult_array():\n");
    show_array(dip,SIZE);     */
    
    
    
    
    
    /*本章最难!!!!! zippol.c----zippo的相关信息*/
/*    {
        int zippo[4][2]={{2,4},{6,8},{1,3},{5,7}};
        printf("zippo=%#p,zippo+1=%#p\n",zippo,zippo+1);
        printf("zippo[0]=%#p,zippo[0]+1=%#p\n",zippo[0],zippo[0]+1);
        printf("*zippo=%#p,*zippo+1=%#p\n",*zippo,*zippo+1);
        printf("zippo[0][0]=%d\n",zippo[0][0]);
        printf("*zippo[0]=%d\n",*zippo[0]);
        printf("**zippo=%d\n",**zippo);
        printf("zippo[2][1]=%d\n",zippo[2][1]);
        printf("*(*(zippo+2)+1)=%d\n",*(*(zippo+2)+1));
    } */
    
    
    
    
    
    /*array2d.c---处理二维数组的函数!!!!就算行列的各自的sum*/
    /* int junk[ROWS][COLS]={{2,4,6,8},{3,5,7,9},{12,10,8,6}};
     sum_rows(junk,ROWS);
     sum_cols(junk,ROWS);
     printf("SUM of all elements=%d\n",sum2d(junk,ROWS));*/
     
     
     
     
     
     
}    

int sum(int ar[],int n)    //【函数中数组的字节大小?8 因为ar虽然写作数组但其实本身是char类型的指针,所以为8个字节】 
{
    int i;
    int total =0;
    for(i=0;i<n;i++)
    total+=ar[i];
    printf("The size of ar is %lu bytes.\n",sizeof ar);
}

/*使用指针算法*/
int sump(int *start,int *end)
{
    int total=0;
    while(start<end)
    {
        total+=*start;
        start++;
    }

/*显示数组的内容*/
void show_array(const double ar[],int n)
{
    int i;
    for(i=0;i<n;i++)
        printf("%8.3f",ar[i]);
    putchar('\n');

/*把数组的每个元素乘以相同的值*/
void mult_array(double ar[],int n,double mult)
{
    int i;
    for(i=0;i<n;i++)
        ar[i]*=mult;

void sum_rows(int ar[][COLS],int rows)
{
    int r; int c; int tot;
    for(r=0;r<rows;r++)
    {
        tot=0;
        for(c=0;c<COLS;c++)
            tot+=ar[r][c];
        printf("row %d:sum=%d\n",r,tot);
    }
}

void sum_cols(int ar[][COLS],int rows)
{
    int r; int c; int tot;
    for(c=0;c<COLS;c++)
    {
        tot=0;
        for(r=0;r<rows;r++)
            tot+=ar[r][c];
        printf("col %d:sum=%d\n",c,tot);
    }
}

int sum2d(int ar[][COLS],int rows)
{
    int r; int c; int tot=0;
    for(r=0;r<rows;r++)
        for(c=0;c<COLS;c++)
            tot+=ar[r][c];
        return tot;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值