指针

指针就是地址,指针变量就是存储地址的变量
声明:int p; 表示p是指向int类型对象的指针变量
取址符:&p 表示p在内存中的地址
间接寻址符:
p 表示指针所指向对象的引用
理解:
int p; 可以理解为 p为指针,p指针指向的对象(p)为 int 类型;p就是一个内存地址,这个内存地址存放一个指针,分配内存后,指针指向该内存地址
&、*可以看作一对相反的运算符
指针必须先分配内存地址再赋值
函数可以将参数定义为指针类型,可以在函数内部去修改
必须把&放在i的前面以便给scanf函数传递指向i的指针,指针会告诉scanf函数把读取的值放在哪里。如果没有&运算符,传递给scanf函数的将是i的值
如果变量数据很大,复制会很耗时,而通过指针传递内存地址会节省时间
使用const来表明函数不会改变指针参数所指向的对象,编译器会检查是否有修改操作;但是可以将指针修改掉,不能修改指针指向内存地址的值(const int *p);另一种写法则相反(int * const p) 后一种写法用到比较少
不要返回指向自动局部变量的指针,会出警告

int *p = malloc(sizeof(int));
int *q = malloc(sizeof(int));
*p = 1;
printf("%d \n", *p); // *p即为寻址到的值
printf("%p \n", p); // p为所指向的内存地址

*p = *q; //  这样只会将q的值赋给q,p、q指针指向的内存地址不同
p = q; // 这样p就指向了q的内存地址,一个改两个都变化

你可能感兴趣的:(指针)