回复 22楼 pq0123
楼主这两天有点松懈了,没那么大激情了,不过还是会继续坚持的,我得好好反思下
回复 24楼 逛奔的蜗牛
楼主昨天有事情,没有及时发帖,今天不上(开学的第十一个晚上) 不过也没学多少//二维数组中 请务必记住a[i]和*(a+i)是等价的 a[i]+j就是a[i][j]的值
//所以*(*(a+i)+j)是与a[i][j]等价的 //i是行数 j是列数 *符号才是对指针变量指向地址的值进行读写操作
/*int main()
{
int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
printf("%d,%d\n",a,*a);//a就是a[0],a[0]就是一个地址,就是将a[0]的地址以十进制的形式打印 *a就是使指针变量指向数组a[0]的地址,等价于a[0](数组a[0]就是一个地址)
printf("%d,%d\n",a[0],*(a+0));//0行0列元素的地址
printf("%d,%d\n",&a[0],&a[0][0]);
printf("%d,%d\n",a[1],a+1);//a+1等价a[1],因为数组就是一个地址,所以不加*号打印出来也是地址的十进制形式
printf("%d,%d\n",&a[1][0],*(a+1)+0);//一行一列元素的地址
printf("%d,%d\n",a[2],*(a+2));//2行0列元素地址
return 0;
}*/
/*
%4d是printf的格式化参数,表示输出一个整型数值,输出宽度为4,且右对齐,如:
printf( "%4d", 1 );
1 //输出1的前边有3个空格,补齐4位的宽度
printf( "%4d", 11);
11 //输出11前边有2个空格,补齐4位的宽度
printf( "%4d", 11111 );
11111 //因为超过了4位,所以前边没有空格
如果要左对齐,则改为 %-4d
*//*
int main()
{//a[1][0]地址值比a[0][1]大
int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
int*p; //a[0]+12就是a[0][12]
//p++每次增加四个字节,比如从a[0][0]到a[0][1]
//二维数组也是地址上市连续的,第一行最后一个元素是与第二个首个元素地址是相连的p+1就是指向下一个yuansu
for(p=a[0];p<a[0]+12;p++)//把a[0][0]的值赋值给指针变量p
{ //使p依次指向下一个元素
if((p-a[0])%4==0) printf("\n");//p移动四次后换行
printf("%4d",*p);
}
printf("\n");
return 0;
}*//*
int main()
{
int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int (*p)[4],i,j;//指针变量p指向包含四个整形元素的一维数组 (*p)[0] (*p)[1] (*p)[2] (*p)[3]
p=a;//p指向二维数组的零行
printf("please enter row and colum:");//row 行 colum 圆柱上 列
scanf("%d %d",&i,&j);
printf("a[%d,%d]=%d\n",i,j,*(*(p+i)+j));//*(p+i)等价于a[i][0]
return 0;
}*//*
int main()
{
int a[4]={1,3,5,7};// subscript requires array or pointer type 下标需要数组或指针类型(一般是数组忘记打分号)
int (*p)[4];
p=&a;//p指向一维数组
printf("%d\n",(*p)[2]);
return 0;
}*//*
void average(float*p,int n)//*score指向*p n=12 *score就是score[0][0]
{
float*p_end;
float sum=0,aver;
p_end=p+n-1;//最后一个元素p+11
for(;p<=p_end;p++)
sum=sum+(*p);//第一次*p就是scor[0][0]的值
aver=sum/n;
printf("average=%5.2f\n",aver);
}
void search(float(*p)[4],int n)//实参score的值(代表该数组0行的起始地址)传给p,是p指向score[0]
{int i;//float(*p)[4]就是一个指向包含4个元素到底一维数组指针变量
printf("The score of No.%d are:\n",n);//No就是 numero数目,号码
for(i=0;i<4;i++)
printf("%5.2f",*(*(p+n)+i));
printf("\n");
}
int main()
{
float score[3][4]={65,67,70,60,80,87,90,81,90,99,100,98};
average(*score,12);//score得分
search(score,2);//search 搜索
return 0;
}*/
//%5.2f是表示五位有效数字且小数点后有两位数字的浮点型数据
/*void search(float(*p)[4],int n)//形参p是指向包含4个float型元素的一维数组到底指针变量 n为3
{
int i,j,flag;//flag 标示 变弱
for(j=0;j<n;j++)//
{flag=0;
for(i=0;i<4;i++)//*(p+j)就是score[j]
if(*(*(p+j)+i)<60) flag=1;//score[j][i]值<60
if(flag==1)
{
printf("No.%d fails,his scores are:\n",j+1);
for(i=0;i<4;i++)
printf("%5.1f",*(*(p+j)+i));//score[i][j]
printf("\n");
}
}
}
int main()
{
float score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,98,100}};
search(score,3);
return 0;
}*/
// C语言中的数据类型没有字符串型,但是它提供了进行整串输入和输出的格式说明符%s.
//%c是按字符格式输入和输出(单个) %s是按字符串格式输入和输出 (多个)
/*int main()
{
char string[]="I love china!";
printf("%s\n",string);//用%s格式声明输出string 可以输出整个字符串
printf("%c\n",string[7]);//用%c格式输出一个字符数组的元素
return 0;
}*//*
//C语言中只有字符变量,没有字符串变量
int main()
{char*string="I Love China!";//定义一个字符指针变量并赋值初始化
printf("%s\n",string);
return 0;
}*/
//字符常量占一个字节的内存空间。
//字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符"\0" (ASCII码为0)。这是字符串结束的标志。
/*int main()
{
char a[]="I am a student.",b[20];
int i;
for(i=0;*(a+i)!='\0';i++)//检测字符串是不是处理完
*(b+i)=*(a+i);//*(b+i)等价于b[i],即对b[i]地址上数据进行操作
*(b+i)='\0';
printf("string a is:%s\n",a);
printf("string b is:");
for(i=0;b[i]!='\0';i++)
printf("%c",b[i]);
printf("\n");
return 0;
}*//*
int main()
{
char a[]="I am boy.",b[20],*p1,*p2;
p1=a;p2=b;//p1,p2分别指向a数组和b数组中的第一个元素
for(;*p1!='\0';p1++,p2++)//p1,p2每次加一
*p2=*p1;//将p1所指向的元素的值赋值给p2所指向的元素
*p2='\0';//加结束符
printf("string a is:%s\n",a);
printf("string b is:%s\n",b);
return 0;
}*//*
void copy_string(char from[],char to[])//数组a,b首元素的值
{int i=0;
while(from[i]!='\0')
{to[i]=from[i]; i++;}//把b数组的值对应复制给a数组
to[i]='0';
}
int main()// unexpected end of file found 文件未结束
{
char a[]="I am a teacher.";
char b[]="You are astudent";
printf("string a=%s\n string b=%s\n",a,b);
printf("copy string a to string b:\n");
copy_string(a,b);
printf("\n string a=%s\n string b=%s\n",a,b);
return 0;
}*//*
int main()
{
char a[]="I am a teacher.";
char b[]="You are astudent";
char*from=a,*to=b;
printf("string a=%s\n string b=%s\n",a,b);
printf("\ncopy string a to string b:\n");
copy_string(from,to);
printf("stirng a=%s\nstirng b=%s\n",a,b);
return 0;
}*//*
void copy_string(char*from,char*to)//a,p
{
for(;*from!='\0';from++,to++)//指针a,p依次加以
{*to=*from;}//把指针p指向数组的值赋值给指针a指向所在数组地址上
*to='\0';//加结束符
}
int main()
{
char*a="I am a teachaer";
char b[]="you are student.";
char*p=b;
printf("string a=%s\nstring b=%s\n",a,b);
printf("\ncopy string a to string b:\n");
copy_string(a,p);
printf("string a=%s\n string b=%s\n",a,b);
return 0;
}*///一个汉字占两个字符
//字符数组由若干个元素组成,每个元素放一个字符,而字符指针变量中存放的是地址(字符串第一个字符的地址),
//可以字符指针变量赋值,但不能对数组名赋值
//编译时为字符数组分配若干储存单元,以存放各元素的值,而对字符指针变量,只分配一个储存单元
//指针变量是可以改变的,但数组名代表一个固定的值(数组首元素的地址),不能改变
//字符数组中个元素的值是可以改变的(可以对他们再赋值),但字符指针变量指向的字符串常量中内容是不可以被取代的
//用指针变量指向一个格式字符串,可以用它代替printf函数格式字符串
/*如 char*format;//格式
format="a=%d,b=%f\n";
printf(format,a,b);
因此只有改变指针变量format所指向的字符串,就可以改变输入输出格式,这种printf函数称为可变格式输出函数*/
希望楼主能继续下去