这份笔记是学习Nisy的C语言课程时随笔记录的(开始只是想根据每课的内容做个大纲;后来发现根据课程的讲解做做笔记可以加深不少印象),记录的内容和顺序大致和课程相同,也有一些自己的注释和疑问(未进行二次处理,难免有记录失误的地方);笔记中的代码,在turboc2中都可编译运行;看论坛里有人发布过这套C语言的课后作业,好像还没有人发布过笔记,就发出来仅供参考![C] 纯文本查看 复制代码 main()
{
char a[2];
* (a) = 0;
*(a+1) = 0;
scanf(" %d ",a);
printf("%d",*a);
}
结论scanf(" %d ",a);这个语句如果%d前面加的空格,输入的时候也要加空格,如果后面加了空格,scanf就会等一个非空格或回车的字符,然后才执行下面的语句;
=================================================================================
main()
{
char a[2];
* (a) = 0;
*(a+1) = 0;
scanf("%d",(char *)a);
printf("%d",*(int *)a);
}
结论:输入300,输出也是300. scanf存储数据时,需要知道内存的地址和长度。%d就已经规定了2个字节的长度。所以(char *)a只表示地址而已。
=================================================================================
main()
{
int a = 5;
int b = 0;
b = a++; /* a++ <==> a = a + 1; */
printf("a++ this is %d\n",b);
b = ++a;
printf("++a this is %d",b);
}
结果:
a++ this is 5
++a this is 7
结论:
b = a++; 是把a的数据给b,然后再自家1;
b = ++a; 是先自家1,然后再把值给b;
main()
{
int i[4];
int k = 0;
int a = 0;
scanf("%d %d %d",i,(i+1),(i+2));
printf("%d\n",a);
if(i[a++] <= 0)
{
printf("%d\n",a);
printf("%d is Over!!\n",i[a++]);
}
printf("%d\n",a);
if(i[a++] <= 0)
printf("%d is Over!!\n",i[a++]);
if(i[a++] <= 0)
printf("%d is Over!!\n",i[a++]);
这段代码证明只要是出现a++的话,a就会自加1;if(i[a++] <= 0) printf("%d is Over!!\n",i[a++]);
这相当于两次a++; if(i[a++] <= 0) 不管输入的数出错与否,a都会自加1;所以printf("%d is Over!!\n",i[a-1]);这就正确了。
main()
{
int i[4];
int k = 0;
int a = 0;
scanf("%d %d %d",i,(i+1),(i+2));
/* if(i[a++] <= 0 || i[a++] <= 0 || i[a++] <= 0) */
if((++a && i[0] <= 0) || (++a && i[1] <= 0) || (++a && i[2] <= 0))
{
printf("%d is Over!!\n",i[a-1]);
k = 1;
}
if(i[0]+i[1] > i[2] && i[0]+i[2] > i[1] && i[1]+i[2] > i[0])
{
;
}
else
{
k = 1;
}
if( k == 1 )
{
printf("SJX is Error!!!");
}
else
{
printf("%d",i[0] + i[1] + i[2]);
}
}
完美的三角形周长
main()
{
int i;
int u;
int k;
int a = 0;
scanf("%d %d %d",&i,&u,&k);
printf("%u %u %u\n",&i,&u,&k);
if((++a && i <= 0) || (++a && u <= 0) || (++a && k <= 0))
{
printf("i+1 is %u %d\n",&i+1,&i+1);
printf("i+2 is %u %d\n",&i+2,&i+2);
printf("%d is Over!!\n",*(&i+(a-1)));
}
这段代码是根据内存地址来定位内存数据;地址分别是65492 65494 65496 但是因为定义的是int型数据,所以&i+(a-1) <==> &i + 1 其实在内存中的地址是两个位数移动的;(&i + n)加几就是加几个&i单元的的长度。
|