发表在 27studio 12-24 13:49:11
C语言的小门道(2)
偶哈哈!我127又回来了!
今天呢,先给大家讲下昨天的作业:::
(1)、
程序局部变量定义不在函数头部,故改为:
#include
main(){
int c,n;
c=1+2;
n=c;
}
(2)、
C++的单行注释是(//)。
好了,现在次要的作业都讲完了(也没多少),现在重点讲下第三题:
指针与数组:
来看一段程序:
#include
mian()
{
int *p,a;
p=&a;
p[3]=a;
}
来,请问,在这个程序中,难道说整型指针变量p写成“p[3]”之后p就成数组了?
当然不可能。在这个程序中,"p[3]"只是“(*p+3)”的缩写。
所以说,如果下面的程序:
#include
main()
{
int c,a[5],*p;
p=a;
a[3]=1;
printf("%d",a[3]);
}
和把"printf("%d",(*(p+3)))"的效果是一样的(笑)。哦对了,这一段第一次提到的程序不要运行哦,会出问题的(不过可以过编译)。
嗯那好,还有人记得数组的定义吗?
其实索特127也不记得了,回家翻书吧。。。。
根据上面的理论,是不是"a[3]=1"也可以写成"(*a+3)=1"了呢?
答案是可以的。因为数组名是相当于数组的首地址,也相当于一个指针。。。
嗯,就是这样。
return和函数定义?
return的用处是返回到调用函数(也可以有返回值),那么如果有以下程序:
#include
void main()
{
int a=3,b=1,c;
c=a+b;
return c;
}
会编译成功吗?
不会的,因为在先前已经定义main函数为无返回值类型,你再想返回c的值,就错误了(或许编译器也给整蒙了:“这人怎么就喜欢自我矛盾,不要返回值,还要让我返回c的值。”).(不过在gcc里,好像只有一个警告。这可能不会达到原本的目的。最好能避免这种写法。。。)
如果你在上面的程序想用return,就只能写:
return;
嗯,明白了?
那么大家知道在返回调用函数后返回到哪吗?
事实上会返回到你的操作系统,或者终端,命令提示符。
那么没有return可以吗?
也是可以的,可能因为c语法比较宽松,所以在执行到函数末尾时,会自动执行无参数的return。
作业:
(1)、
改程序:
#include
void c(void)
{
printf("hello!");
return 0;
}
main()
{
c();
}
(2)、
判断:
下面程序可以编译通过吗?
#include<stdio.h>
main()
{
char name[20];
printf("what is your name:");
gets(name);
printf("your name is %s",name);
}
(3)、
思考题:
C语言的逻辑值?
后来看了一下,(*a+1)写错了,应该是(*(a+1))(多谢自然选择的提醒)
排版太烂了
指针写错了“(*p+1)”
从未见过像你这样用C的
什么鬼