c指针
1. 指针就是内存中的一个地址; 程序中定义了一个变量,进行编译时就会给该变量在内存中分配一个地址,通过访问这个地址可以找到所需的变量,这个变量的地址称为该变量的指针;
2. 定义指针变量 类型说明 * 变量名 ; *表示该变量是一个指针变量
指针变量的赋值 不仅需要定义,必须赋予具体的值 地址运算符& 来表示变量的地址 & 变量名 ; &a 表示变量a的地址
俩种赋值方式 int a; int *p = &a; int a; int *p; p = &a;
不允许把一个数赋予指针变量
指针变量的引用: 引用指针变量是对变量进行间接访问的一种形式 * 指针变量;
& 返回一个操作数地址的单目运算符,叫作取地址运算符 p = &i; 将变量i的内存地址赋给p,地址是该变量在计算机内部的存储位置
* 是单目运算符,叫作指针运算符,作用返回指定的地址内变量的值;
&*p 先*运算, 相当于取地址 *&a 先进行&运算, 相当于取地址的值;
指针自加自减运算,按照它所指向的数据类型的直接长度进行增或减;
一维数组的名称就是数组在内存中的首地址,定义一个指针变量,将数组的首地址传给指针变量,则指针就指向了这个一维数组;int *p,a[10]; p = a;
指针的方式引用一维数组的元素, *(p+n) 表示各个元素;
二维数组 &a[m][n] 就是 第m行n列元素的地址; *(*(a+n)+m) *(a[n]+m) 表示第n行m列元素 *(a+i) 与a[i] 是等价的
使用字符指针指向一个字符串,此时可不定义数组 char *string = "hello"; 把字符串中第一个字符的地址赋给指针变量string;
指针数组:一个数组,其元素均为指针类型数据,每一个元素都相当于一个指针变量;char * mo[] = {"AA","bb","cc"};
指向指针的指针变量,当一个指针变量用于指向指针类型变量时, 类型标识符 ** 指针变量名; int **p;
指针变量做函数参数,
值传递的概念,函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,在函数调用过程中,形参的值发生改变,实参的值不会发生变化; 指针变量做函数参数也是如此,调用函数不可能改变实参指针变量的值,但可以改变实参指针变量所值变量的值;
指针变量也可以指向一个函数,一个函数在编译时被分配一个入口地址,该入口地址就称为函数的指针,可以用一个指针变量指向函数,通过该指针变量调用;
类型名 *函数名(参数列表);