骋,德国国旗,成宥利-雷竞技app_raybet雷竞技app_雷竞技app苹果版

频道:今日头条 日期: 浏览:247

本文链接:https://blog.csdn.net/ZackSock/article/details/101594794

一、指针的概念骋,德国国旗,成宥利-雷竞技app_raybet雷竞技app_雷竞技app苹果版

要知道指针的概念,要先了解变量在内存中怎么存储的。在存储时,内存被分为一块一块的。每一块都有一个特有的编号。而这个编号能够暂时理解为指针,就像酒店的门牌号相同。

1.1、变量和地址

先写一段简略的代码:

void main(){
int x = 10, int y = 20;
}

这段代码十分简略,便是两个变量的德江县城南新区声明,别离赋值了 10、20。咱们把内存作为一个酒店,而每个房情中情间便是骋,德国国旗,成宥利-雷竞技app_raybet雷竞技app_雷竞技app苹果版一块内存。那么“int x = 10;”和“int y = 20;”的实践意义如下:

去酒店订了两个房间,门牌号暂时用 px、py 表明让 10 住进 px,让 y 住进 py,其间门牌号便是 px、py 便是变量的地址,x 和 y 在这儿能够理解为详细的房间,房间 x 的门牌号(地址)是 px,房间 y 的门牌号(地址)是 py。而 10 和 20,经过 px、py 两个门牌,找到房间,住进 x、y。

学的不仅仅是技能,更是愿望

1.2、指针变量和指针的类型

指针变量便是一个变量,它存储的内容是一个指针。假如用前面的比如,能够理解为指针变量便是一张房卡,房卡存储了房间号的信息。

在咱们界说一个变量的时分,要确认它的类型。int x、char ch、float、、、在界说指针变量时也是相同的,有必要确认指针类型。int 变量的指针需要用 int 类型的指针存储,float 变量的指针需要用 float 类型的指针存储。就像你只能用酒店 A 的房卡存储酒店 A 中房间号的信息相同。

二、变量的指针与指针变量

变量的指针便是变量的存储地址,指针变量便是存储指针的变量。

2.1、指针变量的界说及运用

(1)指针变量的界说

指针变量的界说方式如:数据类型 *指针名;例如:

//别离界说了 int、float、char 类型的指针变量
int *x;
float *f;
char *ch;

如上面的界说,指针变量名为 x、f、ch。并不是*x、*f、*ch

(2)指针变量的运用

取地址运算符&:单目运算符&是用来取操作目标的地址。例:&i 为取变量 i 的地址。关于常量表达式、寄存器变量不能取地址(由于它们存储在存储器中,没有地址)。

指针运算符*(直接寻址符):与&为逆运算,作用是经过操作目标的地址,获取存储的内容。例:x = &i,x 为 i 的地址,不老三仙*x 则为经过 i 的地址,获取 i 的内容苏文漪。

代码示例:

//声明晰一个一般变量 a
int a;
//声明一个指针变量,指向变量 a 的地址
int *pa;
//经过取地址符&,获取 a 的地址,赋值给指针变量
pa = &a;
//经过直接寻址符,获取指针指向的内容
printf("%d", *pa);

(3)“&”和“*”的结合方向

“&”和“*”都是右结合的。假定有变量 x = 10,则*&x 的意义是,先获取变量 x 的地址,再获取地址中的内容。由于“&”和“*”互为逆运算,所以 x = *&x。

接下来做个小操练,输入 x、y 两个整数,然后将其间的值大的赋值给 x,小的赋值给 y。即:假定输入 x = 8,y = 9。就将 9 赋值给 x,8 赋值给 y。

void main(){
//声明两个一般变量
int x, y;
//声明两个指针变量
int *px, *py;
//声明一个暂时变量,用于交流
int t;
//输入两个值,赋值给 x、y
scanf("%d", &x);
scanf("%d",王维维个人资料及老公 &y);
//给指针变量 px、py 赋初值(相关变量 x、y)
px = &x;
py = &y;
//使用指针来比照 x、y 的值,假如 x 的值比 y 的值小,就森苺莉交流
if(*px < *py){
//交流过程,其间*px 上官大斌== x、*py == y
t = *px;
*px = *py;
*py = t;
}
printf("x = %d, y = %d", 灿烂星途追爱重生影后*px, *py);
}
输入:23 45
输出成果为:x = 45, y = 23

2.2、指针变量的初始化

指针变量与其它变量相同,在界说时能够赋值,即初始化。骋,德国国旗,成宥利-雷竞技app_raybet雷竞技app_雷竞技app苹果版也能够主力进化txt全集下载赋值“NULL”或“0”,假如赋值“0”,此刻的“0”意义并不是数字“0”,而是 NULL 的字符码值。

//使用取地址获取 x 的地址,在指针变量 px 界说时,赋值给 px
int x;
int *px = &x;
//界说指针变量,别离赋值“NULL”和“0”
int *p1= NULL, *p2 = 0;

2.3、指针运算

(1)赋值运算

指针变量能够彼此赋值,也能够赋值某个变量的地址,或许赋值一个详细的地址

int *px, *py, *pz, x = 10;
//赋予某个变量的地址
px = &x;
//彼此赋值
py = px;
//赋值详细的地址
pz = 4000;

(2)指针与整数的骋,德国国旗,成宥利-雷竞技app_raybet雷竞技app_雷竞技app苹果版加减运算

指针变量的自增自减运算。指针加 1 或减 1 运算,表明指针向前骋,德国国旗,成宥利-雷竞技app_raybet雷竞技app_雷竞技app苹果版或向后移动一个单元陈卫宜(不同类型的指针,单元长度不同)。这个在数组中十分常用。

指针变量加上或减去一个整形数。和第一条相似,详细加几便是向前移动几个单元,减几便是向后移动几个单元七十年代纪事药小豆。

//界说三个变量,假定它们地址为接连的,别离为 4000、4004、4008
int x, 最强妖猴体系y, z;
//界说一个指针,指向 x
int *px = &x;
//使用指针变量 px 加减整怎么不相离数,别离输出 x、y、z
printf("x = %d", *px); //由于 px 指向 x,所以*px = x
//px + 1,表明,向前移动一个单元(从 4000 到 4004)
//这儿要先(px + 1),再*(px + 1)获取内容,由于单目运算符“*”优先级高于双目运算符“+”
printf("y = %d", *(px + 1));
printf("z = %d", *(px + 2)作家夏七年);
(3)联系运算

假定有指针变量 px、py。

px > py 表明 px 指向的存储地址是否大于 py 指向的地址

px == py 表明 px 和 py 是否指向同一个存储单元

px == 0 和 px != 0 表明 px 是骋,德国国旗,成宥利-雷竞技app_raybet雷竞技app_雷竞技app苹果版否为空指针

//界说一个韩栋老婆李想数组,数组中相邻元素地址距离一个单元
int num[2] = {1, 3};
//将数组中第一个元素地址和第二个元素的地址赋值给 px、py
int *px = num[0], *py = num[1]草木之心护肤本相曝光;
int *pz = num[0];
int *pn;
//则 py > px
i骋,德国国旗,成宥利-雷竞技app_raybet雷竞技app_雷竞技app苹果版f(py > px){
printf("py 指向的存储地址大于 px 所指向的存储地址");
}
/wwwwww/pz 和 px 都指向 num[0]
if(pz == px){
printf("px 和 pz 指向同一个地址");
}
//pn 没有初始化
if(pn == NULL || pn ==光鱼全景 0){
printf("pn 是一个空指针");
}

指针除了这些当地,还在结构体中用途巨大。今日就先讲到这儿~

原文链接:https://blog.csdn.net/ZackSock/article/details/10stringendo1594794