1、指针概念
- 地址:分配给每个对象(变量、函数、数组.....)的内存单元都有一个唯一的编号,这个编号称之为存储单元的地址。
- 在内存中,这个编号按字节来编号。在C语言中,可以认为指针就是一个地址编号,一个变量的地址称为变量的“指针”
2、指针变量
- 指针变量也是一个变量(不是普通的变量),其保存的是另外一个对象的地址
- & :取地址符。单目运算符,表示取xxx对象的地址
eg:&a ==> 变量 a 的地址 思考:p = &a p 该如何定义呢? -------往下看 - 指针变量的定义:指向的类型 * 变量名; * :表示后面那个变量是一个指针变量 指向:表示保存谁的地址就表示指向谁
eg:int *p; ==>表示定义了一个指针变量 p ,p 指向的类型为 int ,即 p 应该要保存一个 int 型变量的地址
char *p = &c; ===> char *p; p = &c; &c 表示 c 的地址
3、*(指向运算符)
- *: 单目运算符,后面加一个地址 *(地址)==> 等价于地址的那个对象(变量、数组、函数..)
*&a :等价于 a,在编译时,编译器会将 *& 直接约掉
指出下面程序的错误:
#include <stdio.h>
int main()
{
int a;
int *p;
*p = 1024;
printf("%d\n", *p);
return 0;
}
分析:p 是一个指针变量,虽然没有被赋值,但它有一个值,只不过这个值不确定,所以称之为野指针
*p表示去访问p指向的对象,而 p 指向未知的地方,那个地方能不能访问还不知道,如果不能访问,则段错误Segmentation fault (core dumped)(非法访问),如果可以访问,就没事