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)(非法访问),如果可以访问,就没事