C语言指针学习笔记

指针

1.        表达式中,数组可以解读成“指向它的初始元素的指针”(有三个例外),和在后面加不加[]没有关系

2.        向一个函数传递数组时,实际上传递的是一个指向初始元素的指针

3.        C中三种内存领域的寿命

静态变量和全局变量的寿命从程序运行时开始,到程序关闭时结束

自动变量的寿命到声明该变量的语句块执行结束为止

通过malloc()分配的领域的寿命到调用free()为止

利用malloc()来进行动态内存分配

1.        Malloc()根据参数指定的大小来分配内存块,它返回指向内存块初始位置的指针,一旦内存分配失败,malloc()将返回NULL,利用malloc分配的内存结束使用时,通过free()来释放内存。

2.        Malloc()返回值的类型为void *,malloc()不是系统调用,属于标准库函数

3.        调用free()后,对应的内存区域是不会立刻返还给操作系统的

C语言申明

1.        首先着眼于标识符(变量或者函数名)

2.        从距离标识符最近的地方开始,依照优先顺序解释派生类型(指针、数组和函数),优先顺序如下:

1)        用于整理声明内容的括弧

2)        用于表示数组的[],用于表示函数的()

3)        用于表示指针的*

3.        解释完派生类型,使用”of”、”to”、”returning”将他们连接起来

4.        最后,追加数据类型修饰符(在左边,如Int、double等)

C语言

英语表达

中文表达

Int hoge

Hoge is int

Hoge是int

Int hoge[10]

Hoge is array(元素个数为10) of int

Hoge是int数组(..10)

Int hoge[10][3]

Hoge is array(元素个数为10)of array(元素个数为3) of int

Hoge是int数组(元素个数3)的数组(元素个数为10)

Int *hoge[10]

Hoge is array(元素个数为10)of pointer to int

Hoge是指向int的指针的数组(元素个数为10)

Int (*hoge)[10]

Hoge is pointer to array(元素个数为10) of int

Hoge是指向int的数组(元素个数为3)的指针

Int func(int a)

Func is function(参数为Int a)returning int

Func是返回int的函数(参数为int a)

Int (*func)(int a)

Func is a pointer to function(参数为int a) returning int

Func是指向返回int的函数(参数为int a)的指针

C的数据类型的模型

一、      基本类型和派生类型

派生类型

1)        结构体

2)        共用体

3)        指针

4)        数组

5)        函数

int (*func_table[10])(int a);

指向返回Int的函数(参数为int a)的指针的数组(元素个数为10)

 

 

 

 


基本类型:链的最后面的元素

二、      指向数组的指针

Int (*array_p)[3]

Int array[3]

Array_p = &array 不能写成 array_p= array因为array(指向Int的指针),array_p(指向int的数组(元素个数3)的指针)

三、      C语言中不存在多维数组

Int hoge[3][2]//int的数组(元素个数2)的数组(元素个数3)

Hoge[i]是指:int的数组(元素个数2)的数组(元素个数3)中的第i个元素,其类型为“int数组(元素个数2)”

作为参数传递时:函数原型:void func(int *hoge)

指向int 的数组(元素个数2)的指针

void func(int (*hoge)[2]) 即 void func(int hoge[3][2])

四、      函数类型派生

从函数类型是不能派生出除了指针类型之外的其他任何类型的。

从数组类型是不能派生出函数类型的。

五、      计算类型的大小

Sizeof(类型名)

Sizeof(int(*[5])(double))

指向返回Int的函数(double)的指针的数组(元素个数5)的大小

1)        指针:大部分情况下,指针的大小和派生源的大小没有关系,大小固定

2)        数组:派生源类型的大小乘以元素个数

Int *hoge[10]//4*10=40个字节

Double *hoge[10]//4*10=40个字节

Int hoge[3][2] //4*2*3=24个字节

六、      基本类型(派生类型的底层)

基本类型:char和int这样的整型以及float和double这样的浮点型

表达式

表达式和数据类型

基本表达式:

1)        标识符(变量名、函数名)

2)        常量(包括整数常量和浮点数常量)

3)        字符串常量(使用“”括起来的字符串)

4)        使用()括起来的表达式

“左值”——“右值”

左值:表达式代表某处的内存区域时

Hoge_p = &hoge;  *hoge_p = 10;//*hoge_p指向Hoge的内存区域

右值:表达式只是表达值时

运算符*将指针作为操作数,返回指针所指向的对象或者函数,只要不是返回函数,运算符*的结果都是左值

运算符&将一个左值作为操作数,返回指向该左值的指针。对左值的类型加上一个指针,就是&运算符的返回类型

运算符优先级

运算符

连接规则

() [] -> .

从左往右

!  ~  ++  --  +  -  *  &  (type)  sizeof

从右往左

/  *  %

从左往右

+  -

从左往右

<<  >>

从左往右

<  <=  >  >=

从左往右

==  !=

从左往右

&

从左往右

^

从左往右

|

从左往右

&&

从左往右

||

从左往右

?:

从右往左

=  +=  -=  *=  /=  &=  ^=  |=  <<=  >>=

从右往左

从左往右

进行单目运算的+、-、*的优先级高于进行双目运算的。。

Const修饰符

Const修饰的是紧跟在它后面的单词

Char * const src//src is read-only pointerto char//src是指向char的只读的指针

Char const *src//src is pointer toread-only char//src是指向只读的char的指针

Charconst *src====const char *src意思完全相同

Typedef

Typedef char *String;//String:指向char的指针

String hoge[10];

Hoge is array(元素个数为10) ofString//hoge是String的数组(元素个数为10)

只有在声明函数形参的情况下,int a[]和int *a才具有相同的意义

函数指针

Void (*func_p)()//变量func_p声明为指向函数的指针,进行函数调用时,可写成(*func_p)()

Int atextit(void(*func)(void))

Atextit是返回Int的函数(参数是,指向返回void没有参数的函数的指针)

Void(*signal(int sig,void (*func)(int)))(int)

首先着眼于标识符signal

Signal isa function(int sig,func is pointer to function(int) returning void) returningpointer to function(int) returning void

Signal是返回“指向返回void参数为int的函数的指针”的函数,它有两个参数,一个是int,一个是“指向返回void参数为int的函数的指针”

数组和指针的常用方法

以函数返回值之外的方式来返回值

若需要通过函数返回值之外的方式返回值,将“指向T的指针”(如果想要返回的值的类型为T)作为参数传递给函数

可变长数组

使用malloc()在运行时为数组申请必要的内存区域

头文件的写法

写头文件是必须遵守的原则:

1.        所有的头文件中,必须要有防止重复#include的保护

2.        所有的头文件只#include自己直接依赖的头文件

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值