指针变量不允许修改,即指向的地址不能被修改,但是地址里的内容可以被修改。
指针指向的变量的值不可通过该指针修改,但是指针指向的值可以改变。
既不能更改它所指向的地址,也不能修改指向地址上的值。
“[]”的优先级要比“*”要高,所以 p先与“[]”结合,构成一个数组,数组名为 p,而“int*”修饰的是数组的内容,即数组的每个元素。
“()”的优先级比“[]”高,“*”号和p构成一个指针的定义,指针变量名为p,而 int 修饰的是数组的内容,即数组的每个元素。数组指针也称指向一维数组的指针,亦称行指针。
指带指针的函数,即本质是一个函数,函数返回类型是某一类型的指针。
int *f(x,y);首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且在主调函数中,函数返回值必须赋给同类型的指针变量。
函数指针是指向函数的指针变量,即本质是一个指针变量。
int (*f) (int x); /*声明一个函数指针 */ f=func; /* 将func函数的首地址赋给指针f */指向函数的指针包含了函数的入口地址,可以通过它来调用函数。 例如:
void (*fptr)();把函数的地址赋值给函数指针,可以采用下面两种形式:
fptr = &Function; fptr = Function;取地址运算符&不是必需的,因为单单一个函数标识符就标号表示了它的地址,如果是函数调用,还必须包含一个圆括号括起来的参数表。可以采用如下两种方式来通过指针调用函数:
x = (*fptr)(); x = fptr();第二种格式看上去和函数调用无异。但是有些人倾向于使用第一种格式,因为它明确指出是通过指针而非函数名来调用函数的。