指针

1.指针变量的定义

(1)定义

在程序中声明一个变量并用地址作为该变量的值,那这个变量就是指针变量。

(2)一般形式

 类型名  *指针变量名

类型名指定指针变量所指向的变量的类型,必须是有效的数据类型。

int *p;

变量p是指向int型变量的指针。

指针变量名是指针变量的名称,必须是一个合法的标识符。

(3)指针与指针变量

C语言中,指针被认为是一个概念,是计算机内存地址的代名词之一。

指针变量本身就是变量,存放地址

(4)指针变量所占内存

指针变量的类型不是指指针变量本身的类型,而是指向它所指向的变量的数据类型。

无论何种类型的指针变量,它们都是用来存放地址的,因此指针变量自身所占的内存大小和它所指向的变量数据类型无关

尽管不同类型的变量所占内存空间不同,但不同类型指针变量所占的内存空间大小都是相同的

(5)注意:

指针声明符*在定义指针变量时被使用,说明被定义的那个变量是指针。

定义多个指针变量时,每一个指针变量前面都必须加上*。

 int *i,p;

//定义变量p,指针变量i;

int *i,*p;

//定义指针变量p,指针变量i; 

 

 

2.指针的基本运算

如果指针的值是某个变量的地址,通过指针就能间接访问那个变量

(1)取地址运算

单目运算符&用于给出变量的地址

int *p,a=3;
p=&a;

将整形变量a的地址赋给整形指针p,使得指针p指向变量a.

用运算符&取变量a的地址,并将这个地址值作为指针p的值,使指针p指向变量a.

指针的类型和它所指的变量的类型必须相同。

(2)间接访问运算

*除了被用于定义指针变量外,还被用于访问指针所指向的变量。

#include<stdio.h>
int main()
{
    int a = 3,*p;
    p = &a;//把变量a的地址赋给指针p,即p指向a;
    printf("a=%d,*p=%d\n", a, *p);
    *p = 10;//对指针p指向的变量赋值,相当于对变量a赋值;
    printf("%d ,%d\n", a, *p);
    scanf("%d", &a);
    printf("%d %d\n", a, *p);
    (*p)++;
    printf("%d %d\n", a, *p);
    return 0;
}

(3)赋值运算

//一旦指针被定义并赋值后,就可以如其他类型变量
//一样进行赋值运算
#include<stdio.h>
int main()
{
    int a = 1,*p1,*p2;
    p1 = &a;
    p2 = p1;
    printf("a=%d,*p1=%d,*p2=%d", a, p1, p2);
    //将变量a的地址赋给指针p1,
    //再将p1的值赋给指针p2,因次指针p1,p2都指向变量a;
    return 0;
}

 

 

3.指针变量的初始化

指针变量在定义后也要先赋值再引用

int a,*p1,*p2;
int *p1=&a;
int *p2=p1;

(1)

把一个变量的地址作为初始化值赋给指针变量时,该变量必须在此之前就已经定义。

因为变量只有在定义后才被分配存储单元,它的地址才能赋给指针变量。

(2)

可以用初始化了的指针给另一个指针变量作初始化值

(3)

不能用数值作为指针变量的初值,但可以将一个指针变量初始化为一个空指针

int *p=0;
//这里0是ASCII字符NULL的值
//常量NULL在系统文件stdio.h中被定义,其值为0,
//将它赋给指针时代表空指针

(4)

定义指针变量后,必须先赋值再引用。

未赋值的话,值不确定,它指向一个不确定的单元。(导致野指针)

 

posted @ 2021-11-13 22:27  何嘉豪  阅读(208)  评论(0编辑  收藏  举报