什么是指针?

        指针是C语言中的一个重要概念,也是C语言的一个重要特色。正确而灵活的运用它,可以有效地表示复杂的数据结构,能动态分配内存,能方便的使用字符串,有效而方便的使用数组。掌握了指针的应用,可以使程序简洁,紧凑,高效。可以说没有掌握C语言,就是没有掌握指针的精华。

       为了能说清什么是指针必须说清楚数据在内存中是如何存储的,又是如何读取的。

       内存有两个属性,.内存是一个线型的存储空间,一个是地址,一个是地址上存放的数据。我们能通过地址索引到里面的东西。内存区的每一个字节有一个编号,这就是"地址"。如果在程序中定义了一个变量,在对程序进行编译是,系统就会给这个变量分配内存单元。

在C语言中, 有两种访问方式,直接访问间接访问。

直接访问:a=5

       系统在编译时,已经对变量分配了地址,例如,若变量a分配的地址是2000,则该语句的作用就是把常数5保存到地址为2000的单元。

间接访问如:scanf("%d",&a);

       调用函数时,把变量a的地址传递给函数scanf,函数首先把该地址保存到一个单元中,然后把键盘接受的数据通过所存储的地址保存到a变量中。

一.初识指针

        C语言中,指针是一个特殊的变量,他是存放地址的。假设我们定义了一个指针变量。int *i_pointer用来存放整型变量i的地址。可以通过语句i_pointer=&i,将i的地址(2000)存放到i_pointer中,这时,i_pointer的值就是2000,即变量i所占用单元的起始地址。要存取变量i的值,可以采用间接方式:先找到存放“I的地址”的变量,i_pointer,从中取出i的地址2000,然后取出i的值3.

 

* : 叫做取值运算符。

&: 取址运算符。

二.指针和指针变量。

知道了变量的地址,就可以通过这个地址来访问这个变量,因此,又把变量的地址成为该变量的“指针”。

C语言中,可以定义一类特殊的变量,这些变量专门用来存放变量的地址,称为指针变量。

三,定义一个指针变量“*”  

     下面都是合法的定义:

float *pointer_3; //pointer_3是指向float型变量的指针变量。

char *pointer_4; // *pointer_4是指向字符型变量的指针变量。

可以用赋值语句使一个指针变量得到另一个变量的地址,从而使它指向一个该变量,

四,在定义指针变量时要注意两点。

        1.指针变量前面的“*”,表示该变量类型为指针型变量,一般形式为:

类型说明符 *变量名

其中,*表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量所指向的变量的数据类型。

例如: float *pointer_1;

指针变量名是pointer_1,而不是 *pointer_1

       2.在定义指针变量时,必须指定基类型,需要特别注意的是,只有整型变量的地址才能放到指向整形变量的指针变量中,下面的赋值是错误的:

float a ;

int *pointer_1;

pointer_1=&a;

/*将float型变量的地址放到指向整形变量的指针变量中,是不对的。

五.指针变量的引用“&”

        指针变量中只能存放地址(指针),不要将一个整数(或任何其他非地址类型的数据)赋给一个指针变量,否则编译器也会把该值当成一个地址来处理。

        C语言中提供了地址运算符&来表示变量的地址。

一般形式:&变量名。

如&a表示变量a的地址,%b表示变量b的地址,当然,变量本身必须预先声明

六.对“&”和“*”运算符再做些说明

    如果已执行了语句。pointer_1=&a;

(1) & *pointer_1的含义是什么?

“&”和“*”两个运算符的优先级别相同,但自右向左结合,因此先进行 *pointer_1的运算,他就是变量a,在执行&运算。

(2)*&a的含义是什么?

先进行&a运算,得a的地址,再进行*运算,即&a所指向的变量,也就是变量a.

*&a和 *pointer_1的作用是一样的,他们都等价于变量a,即*&a与a等价。

(3)(*pointer_1)++,相当于a++

注意括号是必要的,如果没有括号,就成 *pointer_1++,++和*为同一优先级别,而结合方向自右向左,因此,相当于 *(pointer_1++)。

由于++在pointer_1的右侧,是“后加”,因此先对pointer_1的原值进行*运算,得到a的值,然后使pointer_1的值改变,这样pointer_1不再指向a了。

 

  

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是稀饭呀。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值