C函数及指针学习2

时间:2022-09-09 20:09:09
1.break  永久终止循环,continue 结束当前循环
2。switch
每个case标签要有唯一值,(且为常量或常量表达式)
不加break 时执行流会贯穿整个case 标签
3 赋值操作符
char x;
int a;
a =x =y + 3;
y + 3 的值赋给a, a为 char 类型或截断
a =x;可能会出现精度损失

# include <stdio.h >
# include <math.h >

void main()
{
int a,b,c;
char d;
printf( "sizeof int %d\n", sizeof( int));
printf( "szieof char %d\n", sizeof( char));
b =pow( 2, 5);
c =pow( 2, 5);
a =b *c;
printf( "a=b*c %d,%d,%d \n",a,b,c);
d =b *c;
printf( "d=b*c %d,%d,%d \n",d,b,c);
a =d =b *c;
printf( "a=d=b*c %d,%d,%d \n",a,b,c);
}

C函数及指针学习2
char ch;
while((ch =getchar()) !=EOF)
{
//EOF需要的位数比char 多,
//getchar()返回 int 类型,
ch =getchar()会截断
在不同的机器中循环会有不同的效果。
}

4 复合赋值语句
a =a + 5,a += 5;
a[f(x)] =a[f(x)] + 1;
a[f(x)] += 1;
# include <stdio.h >
# include <math.h >
int func()
{
static a = 0;
printf( "func run for %d time \n",a);
a ++;
return a;
}
void main()
{
int i;
int b[ 4] ={ 1, 2, 3, 6};
b[func()] += 1; //b[1]_=1;func运行了一次
for(i = 0;i < 4;i ++)
{
printf( "%d  ",b[i]);
}
printf( "\n");
b[func()] =b[func()] + 1; //b[3=b[2]+1],func 运行了两次
for(i = 0;i < 4;i ++)
{
printf( "%d  ",b[i]);
}
printf( "\n");
}

C函数及指针学习2


5.sizeof 
为单目操作符
sizeof( int )
sizeof(x)
int a[ 8];
szieof(a);
double a[ 8];
sizeof(a)
是以字节为单位的
int a = 1; int b = 1;
sizeof(a =b + 1)//运行完后 a=1 ,不会进行运算
# include <stdio.h >
# include <math.h >

void main()
{
int a,d,e,f;
char b[ 4] ={ 1, 2, 3, 6};
double c[ 4] ={ 1, 2, 3, 4};
e = 1;
f = 0;
a = sizeof(b);
printf( "sizeof b %d \n",a);

d = sizeof(c);
printf( "sizeof c %d \n",d);
sizeof(f =e + 1);
printf( "f= %d\n",f);

}
C函数及指针学习2

指针的sizeof为 4 (32位软件中)

# include <stdio.h >
# include <math.h >

void main()
{
double ( *fun)();
int a,d,e,g,x,y,z;
double *h;
double f;
char b[ 4] ={ 1, 2, 3, 6};
double c[ 3] ={ 1, 2, 3};
double * ( *s)[ 3][ 6]; 
e = 1;
f = 0;

h =c;

a = sizeof(b); //数组,返回数组所占的字节数 4*1=4
printf( "sizeof b %d \n",a);

d = sizeof(c); //数组,返回数组所占的字节数 3*8=24
printf( "sizeof c-> %d \n",d);
x = sizeof (h); //指针,即地址,32位软件中 地址为4字节
printf( "sizeof h -> %d\n",x);
//h和c 比较

y = sizeof ( *h);
printf( "y= %d\n",y); //指针的元素,double 8字节


g = sizeof (fun); //指针,即地址,32位软件中 地址为4字节
printf( "g= %d\n",g);



//double* (*s)[3][6]; 
//s为指针,指针指向2维数组,二维数组中存放的是指针
printf( "s -> %d\n", sizeof(s)); //指针 4
printf( "*s -> %d\n", sizeof( *s)); //整个数组 18个元素,每个元素为指针 3*6*4=72
printf( "**s -> %d\n", sizeof( * *s)); //数组的一维 6个元素  6*4=24
printf( "***s -> %d\n", sizeof( * * *s)); //第一个元素,为指针 4
printf( "****s -> %d\n", sizeof( * * * *s)); //指针所指的数,double 8
}
C函数及指针学习2
C函数及指针学习2

为什么:
d = sizeof(c); //数组,返回数组所占的字节数 3*8=24
printf( "sizeof c-> %d \n",d);
x = sizeof (h); //指针,即地址,32位软件中 地址为4字节
printf( "sizeof h -> %d\n",x);
//h和c 比较
为什么差别这么大。

数组名和指针的差别
它们的第一个区别是:数组名是指针常量,指针不能修改,指针指向的值可以改。
它们的第二个区别是:每当用到数组名这个指针的时候,系统都会传入数组的信息,而普通的指针只是一个4字节的整数。


6 if条件判断时 要注意 = 和 ==

7隐式类型转化
c的整型算数运算,至少的精度为 int
char a.b.c;
a =b *c;
先将 b c 的值转化为 int ,相乘后转化成 char (可能截断),赋值给 a
8算数转换
在操作数之间 将较低的类型转化成较高的类型
int a,b;
long c;
c =a *b;
根据优先级 先 a *b 为返回 int 类型,c =a *b,将 int 类型转化成 long 赋值给c
c =( long)a *b;
a 从 int转化成 long ,b和a两个操作数之间 a的类型比较高,b转化成 long ,a *b 返回 long ,赋值给 c9

9 短路求值
&& || 具有短路求值特性