6.基类型指针

基类型相同的两个指针不能进行+运算

【例】以下选项中,对于基类型相同的指针变量不能进行运算的运算符是()

A.+    B.-    C.++    D.--

【答案】A

【解析】在C语言中,当指针变量指向某一处连续存储单元时,可以对该指针变量进行++、--运算或者加、减某个整数的算术运算,以达到移动指针的目的。此外,当两个基类型相同的指针变量都指向某一个连续储存区的储存单元时,如指向同一组中的两个元素,则这两个指针可以相减,得到的差值(取绝对值)表示两个指针之间的元素个数。


7.区别  int *s() 与  int(*s)()

    我们已经知道,可以用指针变量指向整型变量、字符型变量,字符串数组,同样指针变量也可以指向个函数。编译时,一个函数将被分配给一个人口地址,这个人口地址就称为该函数的指针。因此,可以通过使用一个指向函数的指针变量调用此函数。
(1)指向函数的指针变量的般定 义形式为:

数据类型( *指针变量名)();
例如:int( *s)();,"数据类型”指该函数返回值的类型。
(2)( *s)()表示定义了一个指向函数的指针变it,但目前它不是固定指向哪个函数,而只是表示定义了这样 一个类型的变量,它的作用是专门用来存放函数的人口地址。在程序中实现把某个函数的地址赋给它 ,它就指向该函数,这样它的值也就确定了。在一个程序中, -个指针变量可以先后指向不同的函数,也就是说指向丽数的指针变量和普通指针变量一样,可以多次使用。
(3)在给函数指针变量赋值时,只需给出函数名而不必给出参数。例如:S- fun;/ * fun为已有定义的有参函数* 1
因为是将函数人口地址赋给8,不涉及参数的问题,不能写成:8 fun(a,b) ;
(4)用函数指针变量调用函数时,只需将( *8)代替函数名即可(s为已经定义过的指向函数的指针变量名),在( *3)之后的括号中根据需要写上实参。
(5)对指向函数的指针变量,有些运算,如++8、--8.5+3等都是没有意义的。

(小提示)在C语言中,()的优先级比*高,因此,在定义指向函教的指针变量时,“*指针变量名”外面必须有括号。
和变量的指针一样,函数的指针也必须赋初值,才能指向具体的函数。由于函数名代表了该函教的入口地址,因此,一个简单的方法是:直接用函数名为函数指针变量赋值。
而 int *s() 表示 一个返回值为指针的函数名。要注意区别这一点。

8.动态分配内存
p=(int*)malloc(size of(int));
//表示向系统借用一个整数(类型大小为int)的储存空间
.......
free(p);
//释放向系统借用的储存空间p