设为首页 加入收藏

TOP

C语言中级(一)
2014-11-23 19:01:31 来源: 作者: 【 】 浏览:51
Tags:语言 中级

c语言中级》知识点总结:

1. sizeof关键字:

编译时确定,sizeof(对象),sizeof(类型),sizeof 对象,sizeof(指针)=4.

int a[5]; sizeof(a) = 20; sizeof(&a) = 20;

2. c语言不允许定义空结构体; c++允许, sizeof() = 1

3. char *a = “hello” “world”; //a为”helloworld”

pintf(“\32” “3\n”) = printf(“\323”);

printf(“\172\n”);//八进制172 ascii对应值

printf(“\0x60”);//十六进制60h ascii对应值

printf(“\60” “3\n”);// 03

4. a[0] = *(a+0), 是一个表达式,0[a]也行,a代表数组第一个元素的首地址。

int a[10]; &a+1指向了a[9]后面,整行加一

对数组名求址&a会导致数组维数上升,变成了数组指针int (*)[10]

5. 有符号数和无符号数运算,结果转化为无符号数。

static int i = 10; 指定i本文件使用

extern int a;/ extern a; 声明a来自其他文件

6. const的作用

const int x = 2; 或者 int const x = 2;

const int *a 或者 int const *a; //a可变,a指向的对象不可变;

int * const a; //const修饰指针a,指针a不可变。

const可以修饰输入参数、返回值、成员函数

7. const指针

一个指向const对象的指针不能赋值给指向非const对象的指针,但反过来可以

(非const可以赋给const)

(1).const int i = 10;

const int *p = &i; //p指向const int

int *q = p; //非法

(2).const int i = 10;

const int **p1;

int *p2;

p1 = &p2;

*p1 = &i; //相当于p2 = &i,但直接p2 = &i非法

*p2 = 20;//修改了常量const int,具体结果在环境上测试

8. typedef int array[10]; //typedef int[10] array;

array a;

array b[5]; //b[5][10]

array *c; //(*c)[10] , (*c)[10]要用二维数组赋值,++往下移动一行

array *c[4];// int (*c[4])[10],指向二维数组的指针数组

一维数组int a[10]中的a等价于定义了一个指向元素的指针---> int * const a;

二维数组int b[3][4]的b等价于定义了一个指向一维数组为元素的指针--->int (*const b)[4]

int b[3][5];

*(*(b+2)+0) b中第二行第0列的值;

*(b+2) b中第二行首地址,*()有降维的作用

b+2 为b[2][0]的地址,类型为int[][5],没降维

9. 结构体对齐规则

(1).结构体中变量的首地址能被该成员大小与对齐基数中的较小者所整除;

(2).结构体总大小为结构体最宽基本类型成员大小与对齐基数中的较小者的整数倍,不足时填充。

(3).确定偏移位置及大小时,将复合类型(如结构体)当做一个整体看待。

struct a struct b

{ int ii; { int i;

double dd; struct a a;

}aa; double d;

sizeof(aa) = 16; }b;

sizeof(bb) = 32;

10. scanf

scanf用%c格式输入时,空格和转义字符都为有效输入;

输出% 需要printf(“%%”); \a鸣响 %[字符集] %[^\n] %i

11. 常量

#define const 字面常量 枚举

12. 头文件 < > 与 “”

< > 直接在系统默认路径下找,找不到就报链接错误;

“ “ 先在当前路径下找,找不到再在系统路径下找,再找不到就返回链接错误

13. 数据类型决定:(1). 数据占用内存空间大小;(2).存储格式; (3).运算规则---行为

存储类型决定: 存储区域,区域决定了作用范围和生命周期。

14. 内存分区

c++内存分为五个区: 堆(new)、栈(局部变量、函数参数)、全局/静态存储区、自由存储区(malloc)、常量区。

c语言分为四个区: 堆(malloc)、栈(局部变量、函数参数)、全局/静态存储区、常量区。

15. 堆区内存使用四要素:

int *p = (int*)malloc(10*sizeof(int));

if (null == p) return;

free(p);

p = null;

16. _msize(p); 返回内存堆空间的大小

17. 千万不要返回指向栈内存的指针和引用,可以返回静态局部变量,静态局部变量在函数外存在但不可见。

18. typedef陷阱

typedef char* pstr;

定义const pstr,我们希望是const char *,但实际是char * const

19. 指针

(1).无类型指针void*p,不能加减一个整数,只能进行赋值、比较、sizeof操作。

(2).static 局部变量指针必须用全局变量初始化;

(3).不同类型的指针不能求差,指针差为(字节数/类型) sizeof(&a[5]-&a[0]) = 4;

(4).int a[10]; a是个常量,一个地址; vc sizeof(&a)=40; gun sizeof(&a) = 4;

(5). int a [8][9]; int(*p)[9] = a;

(6). char *p = “abcd”; p[0]=’m’; //非法,p指向常量区,不能修改;

(7).char *p = “hello”; //错误的写法,因为p指向了常量区,而p是指向变量的指针,意味着可修改所指数据,应该改为const char *p = “hello”.

(8). 任何类型的指针大小都为4个字节。

22. 指针与const

(1) int (2) * (3) p; (1)和(2)位置:p指向的不能修改 (3)位置:p不能修改

char **p; p----> char * ----> char;

const char**p p----> const char * ---->const ch

char * const *p p---->char * const ----->char

20. 函数与指针

函数的返回值和形参列表共同构成函数类型;

typedef float (*pf) (int,double) //函数指针

int (*p)[3]; //二维数组指针,大元素,每行有三列

int *ptr[3][4];//二维指针数组

int *(*ptr)[4];//指向二维指针数组的指针

int (*myfun())(int *, int *)//定义一个函数,返回类型为函数指针

int (*s[10])(int) //含有10个函数指针的数组

char(*(*fun())[4])(int *p)

----> char(*)(int *p) (*)[4] fun()//定义了一个函数,返回类型为指向二维数组的指针,数组的元素也为函数指针

char (*(*(*q)())[5])()

---->char (*)() (*)[5] (*q)() //定义了一个函数指针,指向的函数返回类型为指向二维数组的指针,数组中的元素也是一个函数指针

21. 指针与函数参数

指向指针的指针作

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言面试题详解(1) 下一篇C指针原理(91)-LINUX应用(3)-进..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: