当前位置:网站首页>小白大战指针 (上)
小白大战指针 (上)
2022-06-29 06:40:00 【Mertrix_ITCH】
一、初识指针
1.指针概述:
指针:内存中的一个地址。
指针变量:专门用来存放变量地址的变量。
1.1 定义 格式:类型说明 *变量名
eg:int *p
(类型说明:由指针变量所指向的数据类型决定。 *---表示该变量是一个指针变量)
1.2 赋值 格式:(& 变量名)
a.int a; int *p=&a [定义的同时进行赋值]
b.int a; int *p; p=&a; [先定义再赋值 !!!此时赋值时不加"*"]
使用指针变量前必须赋值,且给指针变量赋值只能赋予地址。
3.变量指针的引用 格式:* 指针变量
其含义是引用指针变量所指向的值。
#include<stdio.h>
int main()
{
int a,b;
printf("请对a、b赋初值:\n");
scanf("%d%d",&a,&b);
//int *p,*q; 定义指针变量p,q。
int *p=&a,*q=&b; //定义指针变量的同时进行赋值
//p=&a,q=&b; 为指针变量赋值
printf("a=%d,b=%d",*p,*q); //引用指针变量
return 0;
}
2."&" 和 “*”
&:取地址符,返回操作数地址的单目运算符;
*:指针运算符,返回指定的地址内的变量的值;
" &* “和 " * & " (”&“和”*"运算符的优先级相同,结合性:自右向左。)
以 int num , *p ; p = &num ; 为例
1. &*p = &(*p) =p 【取变量num地址】
2. *&num = *(&num)=num 【 取变量num的值】
#include<stdio.h>
int main() {
long i;
long *p;
printf("please input the number:\n");
scanf("%ld",&i);
p=&i;
printf("the r1 is:%d\n",&*p); /* 输出变量i的地址*/
printf("the r2 is:%d\n",&i); /* 输出变量i的地址*/
printf("the r3 is:%d\n",*&i); /* 输出变量i的值*/
printf("the r4 is:%d\n",i); /* 输出变量i的值*/
printf("the r5 is:%d\n",*p); /* 以指针形式输出变量i的值*/
}
3.指针自增自减运算
指针的自增自减运算是按照它所指向的数据类型的直接长度增减。
Example:
short i=4;
short *p=&i;
p++; //short-占2个字节,p的值增加2(2个字节)
#include<stdio.h>
int main(){
int i;
int *p;
printf("please input the number:\n");
scanf("%d",&i);
p=&i;
printf("the result1 is %d\n",p);
p++; //指向下一个存放int类型数的地址,p的值增加4(4个字节)
printf("the result2 is %d\n",p);
}
二、一维数组与指针
1.定义一个一维数组时,系统会在内存中为该数组分配储存空间,其数组名称就是该数组的首地址。
1.在定义一个指针变量,并将数组的首地址传给指针变量,则该指针就指向了这个一维数组 。
eg:int *p,a[5];
p=a || p&a[0]; //将数组a的首地址赋给p
2.通过指针引用一维数组
eg: *(p+i) || *(a+i)) //i:为循环变量,用循环语句移动指针打印数组元素
优化: printf("%d\t",*p++) //表示指针移动可以使用"++"或"--"运算符
#include<stdio.h>
int main() {
int *p,*q,a[5],b[5];
p=&a[0];
q=b;
printf("please input array a:\n");
for(int i=0; i<5; i++) {
scanf("%d",&a[i]);
}
printf("please input array b:\n");
for(int i=0; i<5; i++) {
scanf("%d",&b[i]);
}
printf("array a is:\n");
for(int i=0; i<5; i++)
printf("%-5d",*p++); //用p++控制指针移动
printf("\n");
printf("array b is:\n");
for(int i=0; i<5; i++)
printf("%5d",*(b+i)); //输出数组元素,*(q+i) 或 *(b+i)
printf("\n");
}
案例优化:
数组赋值时:采用(p++)进入下一存放基本整型数的地址。
@!!!若此时输出采用*p++,则重置指针变量p指向数组a的首地址。
Example:for(int i=1;i<5;i++)
scanf("%d", p++ || &a[i]);
#include<stdio.h>
int main(){
int *p,*q,a[5],b[5];
p=&a[0];
q=b;
printf("please input array a:\n");
for(int i=0; i<5; i++) {
scanf("%d",p++); //p++:指向下一存放基本整型数的地址。
}
printf("please input array b:\n");
for(int i=0; i<5; i++) {
scanf("%d",q++);
}
q=a; /*@此时必须:将指针变量p、q重新定位到数组a、b的起始位置*/
q=b;
printf("array a is:\n");
for(int i=0; i<5; i++)
printf("%-5d",*p++); //用*p++控制指针移动
printf("\n");
printf("array b is:\n");
for(int i=0; i<5; i++)
printf("%5d",*q++); //输出数组元素,*(q+i) 或 *(b+i)
printf("\n");
}

边栏推荐
- 蓝桥杯——13届第二批试题解析
- Vibration signal generation and processing based on MATLAB Doppler effect
- Markdown skill tree (4): link
- From XX import* is equivalent to from XX import *, and no space is required
- Alicloud access resource: nosuchkey
- Detailed design of PLC program control system for washing machine
- 部署Prometheus-server服务 system管理
- Kingbasees coping with transaction rollback caused by too fast growth of table age
- Appium automation test foundation ADB common commands (II)
- 呕心沥血总结出来的MySQL常见错误以及解决方法(二)
猜你喜欢

matlab 多普勒效应产生振动信号和处理

ShapeShifter: Robust Physical Adversarial Attack on Faster R-CNN Object Detector

Perceiving healthy life, enabling boundless connection -- contributing to openharmony 3.1 ecological construction

Appium自动化测试基础 — ADB常用命令(三)

IMX6DL4.1.15支持EIM总线(下)——配置原理分析。

Dump (cl\alv\tree\base================================cp|set\items\for\column) when expanding node or clicking toolbar button

施努卡:什么是视觉定位系统 视觉定位系统的工作原理
What tools do testers need to know

TREE ALV 展开Node或者点击Toolbar按钮时DUMP(CL_ALV_TREE_BASE==============CP|SET_ITEMS_FOR_COLUMN)

Appium environment setup
随机推荐
How to view software testing training? Do you need training?
Schnuka: automatic tire grabbing installation, 3D visual positioning, automatic robot grabbing
循环嵌套问题:为什么大循环在内,小循环在外可以提高程序的运行效率
100 lectures on Excel advanced drawing skills (VI) - practical application cases of Gantt chart in project progress
[industrial control old horse] detailed explanation of the design scheme of the running lamp control system based on Siemens S7-200PLC
Listen to textarea input through Keyup to change button style
Kingbasees v8r6 cluster maintenance case -- single instance data migration to cluster case
蓝桥杯——最小框架
1032 Sharing
Reflection modification final
【工控老马】西门子PLC s7-300SCL编程详解
IMX6DL4.1.15支持EIM总线(下)——配置原理分析。
postman预处理/前置条件Pre-request
SQL 注入绕过(六)
tf. compat. v1.assign
蓝桥杯——13届第二批试题解析
Suggestions on working methods and efficient work
719. 找出第 K 小的数对距离(二分)
Schnuka: what is visual positioning system? How visual positioning system works
pycharm的虚拟环境如何共享到jupyter-lab