指针是保存地址的变量。指针变量的值是具有实际值的变量的地址。
指针作为函数参数时,形参是指针变量,例如int exchange(int *a,int *b),实参传入表示地址的变量,例如int *a,*b,exchange(a,b)。
*p++表示先输出当前地址的值,然后指针指向下一个地址
const指常变量, int const *p 说明指针指向可变,值不可变。int * const p 说明指针值可变,指向不可变。const 前后都有*时,指向和值都不可变。
数组变量是特殊的指针,所以
- int a[5];int *p=a;
- 数组单元需要取地址,
- a=&a[0]
- p[0]==a[0]
malloc函数可以申请确定单元个数的数组所要占的空间,如果申请失败则返回0,也叫做NULL。
用完空间必须还给”系统“,只能还申请的空间的首地址,比如int *p = (int*)malloc(n*sizeof(int)),还得时候只能 free(p)。其中int*用来强制类型转换。
对于以下代码段,正确的说法是:
char *p;
while (1) {
p = malloc(1);
*p = 0;
}
-
A.最终程序会因为没有没有空间了而退出
-
B.最终程序会因为向0地址写入而退出
-
C.程序会一直运行下去
-
D.程序不能被编译
选B,因为malloc分配内存失败后不会直接退出程序,会返回NULL指针,而*p=0对null指针位置写入数据,引起程序终止。