Linux学习(九): C语言复习

来源:互联网 发布:云计算厂商 编辑:程序博客网 时间:2024/05/21 21:40

C语言是Linux编程的基础,这里把C语言的知识复习一下,对于c语言基础知识不再提及,主要写一些容易出错的东西。

1、指针

      1.1 指针和数组

一级指针与一维数组,将数组名赋值给指针后,操作指针就是操作数组。
二级指针与二维数组,二维数组不能直接赋值给二级指针,因为二者指向的数据不同。二维数组名指向的是一维数组的地址。
数组指针,指向数组变量的指针,格式:<数据类型>  (*<指针变量名>)[<大小>];范例:
 int (*p)[10];
代表指向一个包含10个整型元素的数组指针。
指针数组,数组中的元素为指针变量。格式: <数据类型>  *<指针变量名>[<大小>];范例:
int *p[10];
代表包含10个元素的数组,数组中的元素为指向整形变量的指针。

1.2 指针与函数

函数指针,表示指向函数的指针,格式<数据类型> (*<函数指针名称>)(<参数说明列表>);范例:
int (*p)(int a,int b);int check(int a,int b);p = check;
表示一个指向函数的指针。这里注意的是,指针指向的函数必须与函数指针定义的返回值和参数类型一致
重定义函数指针,由于函数指针比较复杂,我们利用typedef重定义,这样用起来会更加简便,格式如下:
typedef int(*func)(int a, int b);  //func作为一个函数指针的类型int check (int a,int b)func func1 = check; 
指针函数,表示返回值为指针的函数,格式<数据类型> 目标函数的返回值类型,范例:
int *add(int a, int b);
表示该函数的返回值是整型指针

1.3 const/void

 const表示为只读变量,不允许修改

const与指针结合的几种情况:
(1)常量化指针的对象
格式:
 const  <数据类型> *<指针变量名称>;
范例:
const int *pint const *pint a =1;p = &a;
指针指向的变量a的值是不允许改变的。此时修改a = 2;会报错。
(2)常量化指针变量
格式:
  <数据类型> *const <指针变量名称>= <指针运算表达式>;
int *const p;int a = 1;p = &a;
指针指向的地址是不能改变的,此时修改p =&b会报错
(3)常量化指针及其对象
格式:
const  <数据类型>  * const    <指针变量名> = <指针运算表达式>  ; 
范例:
const int *const p;int a =1;p = &a;

此时,指针指向的地址和地址内的变量都不可以改变。
void
void型的指针变量是一种指向不确定数据类型的指针变量。它可以通过强制类型转换让该变量指向任何数据类型的对象。
一般形式为: 
    void   *<指针变量名> ;

2、内存区域的划分



1.栈:由程序自动分配和释放,调用函数时开辟空间,函数调用结束后释放空间
2.堆区:有程序员分配和释放的。malloc,free
如果没有自动释放,可能会操作系统回收
3.全局区/静态区(在全局设置的变量或在局部静态变量)
初始化区 static int a =0;
未初始化区 static int a ;
若没有初始化,默认值为0
4.常量区
只读,不可写
char p[]="hello" 这个的hello在栈
char *p = "hello"这个hello在常量区,然后由指针指向它
5.程序代码区
存放二进制代码

原创粉丝点击