C语言零散笔记

 

时间:2013年7月4日16:15:01

1. sizeof与strlen的不同

sizeof是求所占内存的空间大小,以byte为单位。

strlen是求字符串中字符的个数,论个数。

示例如下:

	char str[] = "hello";
	cout<<"sizeof(str) = "<<sizeof(str)<<endl;
	cout<<"strlen(str) = "<<strlen(str)<<endl;
	/*
	输出结果:
	sizeof(str) = 6
	strlen(str) = 5
	*/


时间:2013年9月1日14:22:02

2. 复合类型数据有:结构体、枚举和共用体。

3. 变量为什么必须初始化?

    因为不初始化变量里面所存的就是垃圾值。

4. 十六进制前面加0x或者0X,八进制前面加0。(注意都是数字零,不是字母o,要知道,这是表示数字的进制,所以前面都是数字0)。

5. float x = 3.2;

    float x = 3.2e3;//x的值是3200,科学计数法

    float x = 323.4e-2;//x的值是3.234,科学计数法

6. ASCII码是一种规定,是针对字符的一种规定,它规定了不同字符是使用哪个整数值来表示的。

7. 为什么需要输出控制符(%d, %s, %x, %X, %#X)?

    因为01组成的代码可以表示数据,也可以表示指令;而且即使01表示的代码是表示数据的话,那么同样的01代码组合,以不同的输出格式输出就会有不同的输出结果。

8. 运算符的优先级

    优先级别:算术》关系》逻辑》赋值 (算计官成负战)

    算术:加减乘除取余;

    关系:大于 大于等于 小于 小于等于 等于 不等于

    逻辑:&&并且  ||或者  !非  

             (这是不同于,&按位与,|按位或,~取反,^异或)

             (&&左边的表达式为假,则右边的不再执行;||左边的表达式为真,则右边的不再执行)

    赋值:=    +=    -=    /=    *=

9. while和for可以相互转化。但for的逻辑性较强。

10. break用于终止循环和switch的;

       break不能直接用于if,除非if属于循环内部的一个子句;

       break按层实施终止功能,只能终止距离它最近的循环;

11. continue用于跳过本次循环余下的语句,转去判断是否需要执行下次循环。

while ( (ch=getchar())!='\n' )

{

continue;

}

12. switch中的case和default只是用来管理程序流程的入口,进入入口后,便开始自上而下执行,故而一般每个case中都有break。

13. 数组和结构体

     (1). 初始化类似:都是在定义的同时才能全部赋值初始化,之后只能有针对性的一个一个的赋值修改。

     (2). 变量名问题:

            数据数组的变量名代表数组的首地址,是一个常指针地址。

            字符数组的变量名输出字符数组的所有字符,&变量名 才是取字符数组的首地址(若想取第三个字符的地址,则应该写为:&字符数组名+2 )。

            结构体的变量名不代表结构体变量的首地址,需使用&取地址符号来实现。

      (3).同类之间赋值问题

            数组之间不能直接赋值,一般使用for循环一个一个的进行赋值;结构体可以直接进行赋值。 

示例如下:

	int a[4] = {1, 2, 3, 4};
	cout<<"a = "<<a<<endl;
	cout<<"&a = "<<&a<<endl;
	cout<<"*a = "<<*a<<endl;
	int *p = a;
	cout<<p[1]<<endl;

	char ch[] = "hello!";
	cout<<"ch = "<<ch<<endl;
	cout<<"&ch = "<<&ch<<endl;
	cout<<"*ch = "<<*ch<<endl;

	struct student
	{
		char name[30];
		char sex;
		int age;
	};
	struct student stu_1 = {"zhangsan", 'm', 25};
	struct student * p_stu_1 = &stu_1;//结构体变量名不代表结构体首地址,必须使用&取地址符
	p_stu_1->age = 30;
	struct student stu_2 = stu_1;//结构体可以相互赋值
	cout<<stu_2.age<<endl;

	/*
	在vs2010中的输出结果是:
	a = 0016FEF4
	&a = 0016FEF4
	*a = 1
	2
	ch = hello!
	&ch = 0016FED8
	*ch = h
	30
	请按任意键继续. . .
	*/

14. 是否存在多维数组?

      不存在,因为内存是线性一维的。

      n维数组可以看成每个元素是n-1维数组的一维数组。

15. return是用来终止函数的。

      当函数名前的返回值类型 和 return表达式返回的类型不同的话,最终函数返回值的类型,以函数名前的返回值类型为准。

       int f(void)

         {

               return 10.5;  //最终f返回的是10,不是10.5

         }

16. 变量的作用域

      全局变量:在所有的函数外部定义的变量。

      全局变量的使用范围为:从定义位置开始到整个程序结束。

      当全局变量与局部变量命名冲突时,局部变量会把全局变量屏蔽掉,即以局部变量为准。

17. 指针是C语言的灵魂。

       指针就是地址,地址就是指针;

       地址是内存单元的编号,指针变量就是存放内存单元编号的变量。

       int * p; //此行代码的理解为:p是变量名;p变量的数据类型是int *类型;所谓int * 类型就是存放int类型变量地址的类型。

       int i = 3;

       p = &i; //此行代码的理解为:p保存了i的地址,因此p指向i;p不是i,i也不是p,修改其中一个另外一个不会变;*p表示的是以p的内容为地址的变量,*p 完全等同于i;

18. 下标和指针的关系

       如果p是个指针变量,则p[i] 永远等价于 *(p+i)

19. 指针变量本身所占的字节空间大小是不变的,跟它所指向的数据类型没关系,都是四个字节(32位)。

20. 浮点数的存储问题

       float和double都不能保证可以把所有实数准确的保存在计算机中,浮点数无法准确存储。

       所以判断浮点型变量x是否为零,不应if (0==x),而是if (x>=-0.001 && x<=0.001)。

       所以浮点型变量不能作为循环中更新的变量。

21. 前自增 和 后自增

      前自增整体表达式的值是i加1之后的值;

      后自增整体表达式的值是i加1之前的值;

22. 三目运算符

     A?B:C

     等价于

     if (A)

          B;

      else

         C;

23. 逗号表达式

      从左到右执行,最终表达式的值是最后一项的值。

24. a. i = i/8;

       b. i = i>>3;

       上面两个语句效果相同,但是b语句更快。

25. 进制之间转换

       十进制转成r进制:除r取余,直至商0,余数倒序排列。

26. 表达式没分号;语句有分号。

      

2013年9月25日21:50:48

27.  小程序判断输出结果

	cout<<"-------------------"<<endl;
	int x=2, y, z;
	x*=3+2;cout<<x<<endl;
	x*=y=z=4;cout<<x<<endl;
	x=y==z;cout<<x<<endl;
	x==(y=z);cout<<x<<endl;
	cout<<"-------------------"<<endl;
	/*
	输出结果为:
	-------------------
		10
		40
		1
		1
	-------------------
	*/


 28. sizeof输出结果

void fun(char str[100])
{
	cout<<sizeof(str);
	cout<<endl;
}

int main(void)
{
	char str1[] = "hello";
	char str2[] = {'h','w','l','l','o'};
	char *p = str1;
	int n = 10;
	cout<<sizeof(str1)<<"  "<<sizeof(str2)<<"  "<<sizeof(p)<<"  "<<sizeof(n)<<endl;
	
	char ss[1000];
	fun(ss);

	void *q = malloc(100);
	cout<<sizeof(q)<<endl;

	/*
	输出结果为:
	6  5  4  4
	4
	4
	*/
	return 0;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值