指针 *
int main()
{
int a = 10, b=20;
int c = a *b;
int *p = NULL;
p = &a;
*p = 100;
p = &b;
}
*p认为是一级指针;p存的是a的地址
指针又称为间接访问符。
&*p = p;
*&p = p;
Typedef查询一下。
基本变量可以进行混合运算。{char、 int、 long int、…}
混合类型 数组、指针等
基本类型不能和混合类型进行运算。
无论是 int *p;还是 char *p1;double *p2;
指针的大小是固定的,由CPU大小决定。32bit电脑对应 4字节
64bit电脑对应8字节。
*p不能给野指针赋值;!!!一定要初始化;
int x = 0;
int *p = NULL;//#define NULL 0;
if (p != NULL){}// 这里不能用 (p != 0)//有时NULL = 0xffffffff;
数组:ar[10]
数组名就是数组的地址,指的是数组首位地址;也是常量
ar[i]; //=> *(ar + i);
i[ar]; //=> *(i + ar);
ar[i]; // => *(ar + i) => (ar + sizeof(int)*i);
int *p = &ar[0]; // int *p = ar;
cout << p[i] << " " << *(p + i) << " " << i[p] << endl;
下标前的不一定时数组名哦。可能是一个指针。
数组名在做形参的时候可以退化为指针;
失效指针
不能把局部变量的地址反馈出来,函数生存期结束,地址失效,指针变成失效指针。
int* GetInt()
{
int a = 10;
return &a;
}
int main()
{
int *p = NULL;
p = GetInt();
printf("%d ,"*p);
}