c语言基础问题

来源:互联网 发布:网络运营保密协议书 编辑:程序博客网 时间:2024/05/16 10:50

c语言中 引用头文件时“”与<>的区别

C语言编译器会用一些目录存放公共头文件;如果用<>则只在公共目录下找头文件;如果用""先在当前目录下找,如果找不到则在这些目录下找。即""的查找范围大(包括<>的查找范围),当头文件在当前目录下时""的查找速度快。一般来说,自己定义的头文件应该用"",因为这些文件放在工程目录(也就是编译器的当前目录)下,而不是放在公共头文件目录下,如果用<>则找不到头文件。而系统提供的头文件,比如库函数的头文件,可以用<>用""肯定可以找到所有头文件,包括系统库函数头文件和自己定义的头文件

int 型的长度 通常为16为 -32768~32767 也有可能用32位长度

float 型的长度是32位 至少有6为有效数字

doubt 型的长度是64位

char  长度为8为


浮点型格式问题

%3.0f 字符长度占三位 小数点占0位   

%6.1f 字符长度占6为,小数点长度占1位

%6f 表示字符长度6位

%.3f 表示小数点长度为3位

%d 十进制

%o 八进制

%x 十六进制

%s 字符串

%% 表%本身

%ld 输出长整形


运算效率问题


++i 效率 >i = i + 1;


指针数组 和  数组指针

int (*p)[10] 数组指针 数组里存储的是数组   p是指向数组的指针   *(p + 1) = (*p)[1]

int *p[10] 指针数组 数组里存储的是指向int型的指针   p是数组


4.全局变量和局部变量在内存中是否有区别?如果有,是什么区别?
      全局变量储存在静态数据库,局部变量在堆栈。

5.int (*(*func)[5])(int *p);解析

func被一个圆括号包含,左边又有一个*,那么func是一个指针,跳出括号,右边是一个[]运算符号,说明func是一个指向数组的指针,现在往左看,左边有一个*号,说明这个数组的元素是指针,再跳出括号,右边又有一个括号,说明这个数组的元素是指向函数的指针。总结一下,就是:func是一个指向数组的指针,这个数组的元素是函数指针,这些指针指向具有int*形参,返回值为int类型的函数。

详细讲解地址http://www.cppblog.com/luliang/archive/2008/09/15/61863.html?opt=admin


5.赋值表达式的一条规则:赋值表达式的左值不能含有限定词!

为了防止指针指向的常量被修改,C标准对于指针间赋值有一个规定,就是左值必须包含右值的所有限定词。 这就限定了一个指向const对象的指针不能赋值给指向非const对象的指针,但反过来就允许。这个规定初看上去非常合理,但其效用其实只限于一级指针,二级指针间的赋值即使满足规定也不再安全。


6.|  &  ^   >>   <<   运算符

1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。 
例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。 
按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。 

2. 按位或运算 按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。 
例如:9|5可写算式如下: 00001001|00000101 
00001101 (十进制为13)可见9|5=13 
 
3. 按位异或运算 按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下: 00001001^00000101 00001100 (十进制为12) 。

0^0=0, 1^0=1, 0^1=1, 1^1=0

0^0=0,0^1=1  0异或任何数=任何数

1^0=1,1^1=0  1异或任何数-任何数取反

任何数异或自己=把自己置0

(2)通过按位异或运算,可以实现两个值的交换,而不必使用临时变量。例如交换两个整数a,b的值,可通过下列语句实现:
    a=10100001,b=00000110
    a=a^b;   //a=10100111
    b=b^a;   //b=10100001
    a=a^b;   //a=00000110




------个人笔记 如有错误希望大家挑错,谢谢

原创粉丝点击