day9
一.前两天的学习目标
1.学习第十章,数组和指针
2.做完相关练习题
二.学习收获
1.初始化数组
a.使用花括号括起来的一系列数值来初始化数值。
b.对数组使用const的方法,这样程序会把每个元素当成常量来处理,和普通变量一样,需要在声明const数组时对其进行初始化。
为初始化的数组和普通变量相似,在初始化之前数组元素的数值是不确定的。
c.初始化列表中的元素数目应该和数组大小一致。
当数组数目少于数组元素数目时,多余的数组元素被初始化为0;当数组数目多于数组元素数目时,则编译器会判断它为错误。
2.指针和数组
数组名同时也是该数组首元素的地址
在c中,对一个指针+1的结果是对该指针增加一个存储单元,对数组而言,地址会增加到下一个元素的地址。
在指针前运用运算符*就可以得到该指针所指向的对象的数值。
指针的运算
#include<stdio.h>
int main(void)
{
int urn[5]={100,200,300,400,500};
int *ptr1,*ptr2,*ptr3;
ptr1=urn;
ptr2=&urn[2];
printf("指针的值为%p,指针指向的值为%d,指针的地址为%p.\n");
printf("ptr1=%p,*ptr1=%d,&ptr1=%p.\n",ptr1,*ptr1,&ptr1);
ptr3=ptr1+4;
printf("\n adding an int to a pointer:\n");
printf("ptr1+4=%p,*(ptr1+3)=%d\n",ptr1+4,*(ptr1+3));
ptr1++;
printf("\n values after ptr1++\n");
printf("ptr1=%p,*ptr1=%d,&ptr1=%p\n",ptr1,*ptr1,&ptr1);
--ptr1;
printf("原始状态为%p:\n",ptr1);
printf("ptr1=%p,ptr2=%p,ptr2-ptr1=%d.\n",ptr1,ptr2,ptr2-ptr1);
printf("ptr3=%p,ptr3-2=%p\n",ptr3,ptr3-2);
}
3.二维数组
#include<stdio.h>
#define ROWS 3
#define COLS 4
void sum_rows(int ar[][COLS],int rows);
void sum_cols(int [][COLS],int);
int sum2d(int(*ar)[COLS],int rows);
int main(void)
{
int junk[ROWS][COLS]={{2,4,6,8},{3,3,7,9},{12,10,8,6}};
sum_rows(junk,ROWS);
sum_cols(junk,ROWS);
printf("所有元素的值为%d\n",sum2d(junk,ROWS));
return 0;
}
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,c,tot;
for(c=0;c<COLS;c++)
{tot=0
for(r=0;r<rows;r++)
tot+=ar[r][c];
printf("cols=%d:sum=%d\n",c,tot);
}
int sum2d(int ar[][COLS],int rows)
{
int r,c,tot;
for(r=0;r<rows;r++)
for(c=0;c<COLS;c++)
tot+=ar[r][c];
return tot;
}
}
}
4.函数,指针,数组
int main(void)
{
double ar[SIZE]={1.2,3.5,9.18,9.99,7.98,8.99,7.12};
int i,n;
printf("The array ar[%d] is:\n",SIZE);
for(i=0;i<SIZE;i++)
printf("%lf",ar[i]);
printf("\n");
n=max_index(ar,SIZE);
printf("NO.%d double number is the maximun number in the array.\n",n);
return 0;
}
int max_index(double *ar,int n)
{
int i;
int index=0;
double tem;
tem=ar[0];
for(i=1;i<n;i++)
{
if(ar[i]>tem)
tem=ar[i];
index=i+1;
}
return index;
}