C语言_指针变量

1.指针的定义

将地址形象化地称为“指针”,地址指向该变量单元。

按变量名访问称为直接访问

使用指针称为间接访问(把变量地址赋给一个指针变量,间接访问,变量地址做中间量)

指针变量:是用来存放地址的变量

指针是一个地址

2.指针变量的定义

类型名 * 指针变量名;
int * pointer_1, *pointer_2;    //int是“基类型” int只能指向为整型的变量
float * pointer_3;                //float指针
char * pointer_4;                //char指针

指针变量前面的 * 表示该变量是指针变量,指针名是pointer_1

3.指针变量的引用

int a=1;
int * pointer_1;   
pointer_1=&a     //把a的地址赋值指针变量p
print("%d", *p);

*p=1  //等价 a=1

(1)& 取地址运算符,&a是变量a的地址

(2)* 指针运算符(或称 “间接访问” 运算符),*p代表指针变量p指向的对象

4.指针变量作为函数参数

void swap(int *p1,int *p2);    //声明
swap(pointer_1,pointer_2);    //调用

5.通过指针引用数组

(1)数组元素指针就是数组元素的地址

int *p;
p=&a[0];
等价于
int *p=&a[0];

(2)数组元素的指针运算

指针加一个整数(+或+=) 如:p+1

指针减一个整数(用-或者-=)如:p-1
自增运算,如 p++,++p
自减运算,如 p--,--p

p+1指向同一个数组中的下一个元素
p-1指向同一个数组中的上一个元素

(3)数组的引用方式

(1)下标法    a[i]
(2)指针法    *(a+i)或 *(p+i)

(4)用数组名做函数参数

以变量名和数组名作为参数的比较
实参类型 变量名 数组名
要求形参的类型 变量名 数组名或者指针变量
传递的信息 变量的值 实参数组首个元素的地址
通过函数调用能否改变实参的值 不能改变实参变量的值 能改变实参数组的值
int sort(int * p,int n);
//    等价于
int sort(int a[],int n)

//    调用
int *p,a[10];
p=a;
sort(a,2);
sort(p,2)

6.通过指针引用多维数组

二维数组a的有关指针
 表示形式 含义 地址
a 二维数组名,指向一维数组a[0],即是0行首地址 2000
a[0],*(a+0),*a 0行0列元素地址 2000
a+1,&[1] 1行首地址 2016
a[1],*(a+1) 1行0列元素a[1][0]的地址 2016
a[1]+2,*(a+1)+2,&a[1][2] 1行2列元素a[1][2]的地址 2024
*(a[1]+2),*(*(a+1)+2),a[1][2] 1行2列元素a[1][2]的值 元素值为13

用指向数组的指针作为函数参数

void search(float (*p)[4],int n);

一维数组有4个元素,因此p的基类型是一维数组,其长度为16字节

你可能感兴趣的:(C语言,C语言,指针,C语言,指针定义,C语言,指针引用,C语言,指针引用多维数组,C语言,指向数组指针作函数参数)