逗号表达式引起的疑问:解决办法
逗号表达式引起的疑问:
#include <stdio.h>
void main()
{
void list(int * a,int n);
int score[5]={60,80,90,70,50},i,*p=score;
printf( "Score:\n ");
for(i=0;i <5;i++)
printf( "%d\t ",*(p+i));
printf( "\n ");
list(p,5);
for(i=0;i <5;i++)
printf( "%d\t ",*(p+i));
printf( "\n ");
}
void list(int * a,int n)
{
int i,t;
for(i=0;i <n/2;i++)
t=a[i],a[i]=a[4-i],a[4-i]=t;
}
式中逗号表达式:t=a[i],a[i]=a[4-i],a[4-i]=t;若换为分号表达式:t=a[i];a[i]=a[4-i];a[4-i]=t;可以吗?为什么?
------解决方案--------------------
不可以
t=a[i],a[i]=a[4-i],a[4-i]=t; 这是一句(功效相当于3句) 因为for后面无大括号,所以跟在for后面相当于
for(...){
t=a[i],a[i]=a[4-i],a[4-i]=t;
}
t=a[i];a[i]=a[4-i];a[4-i]=t;是3句,跟在无大括号的for后面相当于
for(...){
t=a[i];
}
a[i]=a[4-i];
a[4-i]=t;
#include <stdio.h>
void main()
{
void list(int * a,int n);
int score[5]={60,80,90,70,50},i,*p=score;
printf( "Score:\n ");
for(i=0;i <5;i++)
printf( "%d\t ",*(p+i));
printf( "\n ");
list(p,5);
for(i=0;i <5;i++)
printf( "%d\t ",*(p+i));
printf( "\n ");
}
void list(int * a,int n)
{
int i,t;
for(i=0;i <n/2;i++)
t=a[i],a[i]=a[4-i],a[4-i]=t;
}
式中逗号表达式:t=a[i],a[i]=a[4-i],a[4-i]=t;若换为分号表达式:t=a[i];a[i]=a[4-i];a[4-i]=t;可以吗?为什么?
------解决方案--------------------
不可以
t=a[i],a[i]=a[4-i],a[4-i]=t; 这是一句(功效相当于3句) 因为for后面无大括号,所以跟在for后面相当于
for(...){
t=a[i],a[i]=a[4-i],a[4-i]=t;
}
t=a[i];a[i]=a[4-i];a[4-i]=t;是3句,跟在无大括号的for后面相当于
for(...){
t=a[i];
}
a[i]=a[4-i];
a[4-i]=t;