【指针/Pointer】基本内容

一、指针的声明

        指针,同整型、字符型、浮点型一样,是C语言中的一个变量类型。指针的特别之处在于,其存储的值是内存地址,指针变量是用来存放内存地址的变量。指针变量声明的一般形式为:

type *var_name;

        与其他变量不同的是,指针本身作为一种变量,并没有一种通用的声明形式,也即不存在如

pointer ptr;

这样一种通用的声明方式,这是因为指针不仅能还能,也就是通过 * 操作符对指针进行解引用(dereference)。我们需要声明指针所指对象的类型才能顺利地进行解引用操作。

二、指针的指针/Pointer to Pointer

        指针所映射的对象可以是任意一种数据类型,int、float、char……,也包括用户的自定义类型如结构体和类(C++)。

        指针本身作为一种数据类型,当然也存在指针的指针(Pointer to Pointer)。此时需要对指针进行二次解引用才能得到最终所指向的内容。

int a;
int *p1 = &a;
int **p2 = &p1; //a is *p1 or **p2

三、void类型的指针

        指针所指的对象可以是任意一种数据类型,包括指针和用户的自定义类型。

        除此之外,void类型的指针也是存在的,可以直接用其他指针赋值,但由于没有映射到任何特定的类型,无法对其进行解引用和算术运算

int a;
int *p = &a;
void *ptr;
ptr = p;            //valid
*ptr = 1;           //invalid
*((int*)ptr) = 1;   //valid

        如果要对void类型指针进行解引用或算术运算操作,需要先进行强制类型转换。

四、指针的算术运算

        唯一允许的指针算术运算就是指针±整数值:

int a;    
int *p;
p = &a;    
/*
pretend address p is 200
size of inteager is 4 bytes
address p+1 is 204
p+2 is 208
p-1 is 196
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值