指针变量

一种特殊的变量
这种变量只是用来存放内存地址的,起名为指针变量
假设定义了一个只存地址的变量p
把变量a的地址赋予指针变量p,则指针变量p的值为1245052。
当访问变量a时,访问的是什么?5
当访问指针变量p时,访问的是什么?1245052


image.png

当访问变量时,为“直接存取(直接访问)"
我们也可以通过指针变量间接的访问该地址中原来的值。此时称为“间接存取(间接访问)"

定义指针变量的一般形式如下:
类型名 *指针变量名;

类型名 *指针变量名1,*指针变量名2..…;

例:

int *pi;
int *pj,*pa;

说明:
1.pi,pj,pa都是变量,不过都是指针变量,定义时在普通变量名的左边加上星号就行了。
2.pi,pj,pa三个指针变量的类型为整型,说明三个变量中只能存放int类型变量的地址。
这时我们称int是指针变量pi,pj,pa的基类型。

例:

double *pd;
char *s1,*s2;

pd的基类型为double类型,在指针变量pd中,只能存放double类型变量的地址。
s1和s2的基类型为char类型,在指针变量51和s2中,只能存放char类型变量的地址。
指向指针的指针
例:

int **p,k,*s=&k;
p=&s;

例:若有以下程序

#include <stdio.h>
main()
{int **k,*a,b=100;
a=&b;k=&a;
printf("%d\n",**k);

程序的输出结果是(B)
A.运行错误
B.100
C.a的地址
D.b的地址

例:

int k,*q,*p;/*k为整型变量,q和p都是指针变量。*/
k=1;  /*给普通变量赋值*/
q=&k;  /*整型变量k的地址赋值给指针变量q*/    p=q;/*将q的值赋值给p*/

例:若有定义:int x,*pb;则正确的赋值表达式是()
A.pb=&x   正确,该变量为指针变量存放x的地址
B.pb=x    错误,pb是指针变量不可存放整型数据
C.*pb=&x   错误,将x地址赋值给一个pb指向的一个内存区域内的东西,若int *pb=&x则正确,不在定义语句中,*为访问符号,定义语句中*只是告知计算机这个变量为指针变量。
D.*pb=*x  错误


解析:

*pb在定义语句中和定义语句外的含义是不同的,比如int *p=&a中的*p指的是p这个变量,只不过是比较特殊的指针变量,而脱离了定义语句的*p的含义是访问p指针变量所指向的内存的区域内的东西



第八章-地址和指针(二)

8.3给指针变量赋值
给指针变量赋“空”值
除了给指针变量赋地址值之外,还可以给指针变量赋一个特殊的值,该值为“空”值

int *p;
p=NULL;  //第一种办法

int *p;
p=0;    //第二种办法

int *p;
p='\0';  //第三种办法

注意:
此时,指针变量p中不是没有值,而是有一个“空”值。


8.4对指针变量的操作

通过指针来引用一个存储单元,“间址运算符"*

#include <stdio.h>
main()
{
int k,*q,*p;
k=1;
q=&k;
p=q ;
printf("%d\n%d\n%d\n",k,*q,*p);
// 答案为:1 1 1
//*p找到p存储的地址指向的那个空间,并把空间中的值拿出来。

间址运算符说明
1.*与&是逆运算
2.在指针变量已经存有某一变量地址时,可以利用
“*变量=值”的形式给指针变量指向的内存空间赋值

int k=10, *p=&k;
*p=12;   //此时k的值变化为12

3.关于++、--号对指针变量的运算★
例:++*p代表++(*p) 取出那个值后进行++即可
★ *p++代表 *(p++)

int *p=&a //假设a的地址为1002,且p为整型指针变量
*(p++)  // p++的地址为1006(因为整型4个字节),所以*(p++)为取出地址为1006的空间内的值

空间的值++就必须使用:如果在右边使用自增或者自减符号,必(*p)++
想给地址++就不用括号

例:用指针指向两个变量,通过指针运算选出值最小的那个数

#include<stdio.h>
main()
{
int a,b,min,*pa,*pb,*pmin;
pa=&a; pb=&b;pmin=&min;
scanf("%d%d",pa,pb); //pa, pb 本身就是地址变量不需要加&符号,等价于scanf("%d%d",&a,&b);
printf("a=%d b=%d\n",a,b);
*pmin=*pa;
if(*pa>*pb)*pmin=*pb;
printf("min=%d\n",min);
}

移动指针
所谓移动指针就是对指针变量加上或减去一个整数,或通过赋值运算,使指针变量指向相邻的存储单元。
形式:
指针变量+整型常量
指针变量+整型变量

指针变量p(基类型为int)为1004,p+4的地址为1004+4*4=1020
i=4,p+i的地址为1020

假定在内存中开辟了如图所示的五个连续的、存放int类型整数的存储单元。
并分别给它们取代号为:a[0]、a[1]、a[2]、a[3]、a[4]。
这些代号所代表的存储单元中,分别有值为:
11、22、33、44、55。p指向a[0]所在地址,p++代表a[1]

image.png

指针比较

if(p<q)
printf("p points to lower memory than q.\n");
else 
printf("q points to lower memory than p.\n");
if(p==\0')printf("p points to NULL\N");

通常两个或多个指针指向同一目标(如同一存储单
元时候)比较才有意义。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容