指针:
指针是一个变量(或是一个实参),其值为一个内存地址。每一个变量都有自己在内存中的地址,使用指针可以把该变量的地址存储在指针变量中。可以通过这种方式对变量复制,拷贝。
int * iptr;
char * cptr;
double * dptr;
赋值:
int a;
int v;
a= 50;
iptr = &a; // iptr 的值是变量a的内存地址, 所以通过访问指针指向的内存地址,就可以访问变量a的值。
v = * iptr; // 读取该指针指向地址的值,然后把值赋给左边的变量。 v的值为50
* iptr = -84; //a 的值被改写成 “-84”, 因为指针 iptr 指向a的内存地址。这条语句其实是将该内存地址的值改写。
数组:
数组=指针,指针指向数组中第0个元素的地址,然后通过偏移得到其他元素的地址。
arr 和 &arr[0] 是等效的
陷阱:
int *f1(void)
{
int m=0;
return &m; //返回后,m的地址空间被释放
}
void f2(void)
{
int *ptr = f1(); //m的地址空间被释放,ptr指向的位置没有确定值。
*ptr = 7; // 出现漏洞
}
未完待续。。。