C必须弄懂的知识点

作者在 2008-05-01 10:47:07 发布以下内容
思考一:
C程序书写格式自由,一行内可以写几个语句,一个语句也可以分写在多行上。只要“在任意一空格处换行”就行。
因此:一个语句不能写在两行上是错误的。

思考二:
C语言要求对所有的变量先定义后使用。
变量的定义不能出现在语句中间,即必须在程序的开头。否则要出错。

思考三:
有时在TC下写电码比较麻烦,而用记事本写程序比较方便,因为在TC环境下不能用鼠标操作,而在记事本下可以进行代码复制粘帖等操作.
思考四:scanf输入函数有一种默认的输入格式:即
        scanf("%d%f",&x,&y);      
        输入的两个数之间有三种分隔:即:
        空格,Tab符,回车符
但却存在一个问题,如果下一项输入的是字符时,就不能用
空格符和制表符分隔。
老师上机考查:自己犯了一个致命的错误:(冒泡排序输入数据时)
scanf("%d,%d",&a,&b);
输入的两个数之间必须要加逗号,而不能是上述的三种之一。
思考五:对于指针变量,下述的两种赋值方式都是正确的:
       (其含义都是将串的首地址赋值给指针变量)
(1)    char *p="china";
(2)    char *p;
          p="china";
但对于数组,仅有一种是正确的。即:char s[10]="china";
            下面的一种是错误的。即: char s[10];
                                                        s="china";
误将s当变量,企图改变变量的值。
小结:
若a是一个数组名,则a=表达式;或a++;等操作肯定是错误的。
数组名不是变量,而是常量,在程序执行期间不能改变其值。

思考六:C语言规定:
(1)一维数组名是一个指针,是数组第一个元素的地址,即是该
     数组的首地址。
(2)指针和数组的一致性:在C语言中 :无论指针是否指向数组,任何指针和数组都有两种引用数据的方式:(二者等价)
     *(x+k) 和 x[k]
例如:char *p="Hello",a[10]={'T','o','m'};
       printf("%c,%c,%c,%c",*(p+1),p[3],*(a+2),a[0]);
      
思考七:在C语言中:指针=数组
                                  指针数组=地址数组
    即:指针数组的每一个元素都是一个地址。
思考八:编程思想总结:
(1)前言搭后语
(2)找足了规律写循环
思考九:分析下面的程序,判断能否出现死循环:
main()
{
int k=0;
do
   ++k;
while(k>=0)
}
不能,由于变量k是int型,数值范围是-32768~~~~32767,当k加到32767时,这时再加1,就变成-32768,条件k>=0就不成立了,从而
循环结束。

main()
{
int a,b;
a=32767;
b=a+1;
printf("%d,%d",a,b);
}
运行结果为:32767,-32768
一定要记住:整型变量的范围是:-32768到32767
思考十:必须要熟记的:
一个字符型变量在内存中占一个字节
一个整型变量在内存中占两个字节
一个实型变量在内存中占四个字节
一个指针变量在内存中占两个字节(small模式编译)
一个指针变量在内存中占四个字节(32位机器上)
思考11:C语言要求每个语句后面加一个分号
一个重要的另外的情形是在if或者while语句之后需要紧跟一条语句,如果此时多了一个分号,那么就执行这条空语句,这也是空语句的作用之一,那么原来紧跟在if或者while子句之后的语句就是一条单独的语句,与判断条件没有任何关系。编译器也不会报错。
例如:if(a>b);
              b=a;
思考12:对逻辑表达式的求解的“深层理解”,常设“考点”。
并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算
符才能求出表达式的解时,才执行该运算符。
思考13:在C语言中,比较(即,关系表达式)的结果用0表示假,用1表示真。
(有三种类型)
数字的比较
字符的比较其实就是它们的ASCII码的比较。
字符串的比较就是比较它们对应的字符。
在C语言中,(逻辑运算)判断一个量是为“真”,还是为“假”时,是以“0”代表“假”。
但不仅仅是以“1”表示“真”,而是所以非“0”的数值表示“真”。
见一考题:
C语言中的逻辑值“真”是用(非0)表示的,
                逻辑值“假”是用(0)表示的。
逻辑表达式值为“真”是用(1)表示,
逻辑表达式值为“假”是用(0)表示
分析:逻辑值“真”,即是判断一个量为“真”,只要是非0即为真。
思考14:字符数组存储字符串。
char str[]="China"; 系统回自动为字符数组str分配6个字节的空间,在最后自动添加上'\0'.这条语句相当于
char str1[]={'C','h','i','n','a','\0'};
特别注意一个问题:
如果我们在程序中用这样的语句char str[5]="China";来保存字符串"China".编译时就会出现数组长度不够的错误提示,应为我们指定的字符
数组的长度是5。而字符串China占5个字节,再加上‘\0’,就需要6个字节,我们定义的5个字节的空间就放不下了。
在C语言中,有一种简洁的方式:例如:
char str[]="China" 或者
char str1[]={'C','h','i','n','a','\0'};
省略[]中的数组元素个数时,在编译的时候,会自动根据给出的初始化元素个数计算出数组大小。
思考15:指针知识形象化:
(1)定义指针变量:(很简单,只要在定义普通变量的基础上,加个*号就行了)例如:
int *p;
char *q;
在程序中:
我们把*p,*q都看作是一个整体,分别表示一个变量。
而p和q分别表示变量的地址。所以叫指针p和指针q
(2)指针运算:与(指针的)类型有关。
特别说明:在32位的计算机系统中一个整型变量占4个字节。
          但在Turbo C中,以一个整型变量占2个字节为准。
(3)指针和数组的一致性。
int array[10];
int *p;
p=array; 或者   ==&array[0]; 因为:
在C,C++中,一个数组的名字就表示这个数组的首地址。所以:
执行语句p=array就可以把数组array[10]的首地址赋值给指针p.
从而指针的目标变量*p就是array[0].根据指针运算原理:
*(p+1)就是元素array[1]
*(p+2)就是元素array[2]
......
*(p+i)就是元素array
版本: V1.0
出品: 本站原创
来源: 本地
语言: 简体中文
授权: 免费
默认分类 | 阅读 1668 次
文章评论,共0条
游客请输入验证码
文章分类
文章归档
最新评论