指针C语言

1指针方式

1.int a,*p=&a;
2. int a;int *p=&a;

特点:
1.指针变量与类型无关,在TC占2字节,在VC下占四字节

2.指针变量的引用

1.直接引用
2.间接引用
注意*的运算对象必须为地址

*p+=1; //相当于取p指针指向的值然后+1
int a=2,b=3,t;
int *p=&a,*q=&b;
t=*p; //交换指针所指向的值
*p=*q;
*q=t;

注意野指针
指针应该先赋值后引用

int *p;
*p+=1; //错误

3二级指针

int a=2,*p=&a,**q=&p; //等价于q->p->a,q存储了p的地址
int *p=*q; //可以得到q所指向的指针地址
//例子:
*p+**q=? //4

4指针与一维数组

1.数组特点: 在内存中存储的是连续的存储空间;一维数组名即代表一维数组的首地址(首元素地址)
数组名不可改变,是个地址!
1.一维数组元素地址的表示方式:

&a[i]; //表示a数组中第i+1个元素
a+i; //a数组名即代表首元素地址
//引入scanf
scanf("%d",&a[i]);//对数组元素进行赋值

2.注意事项
那如果是char字符串数组呢

scanf("s",a); //注意与gets的区别,scanf遇到空格会退出,将空格以及空格之后的元素进入缓冲区
gets(s); //会捕获到空格
//例子,输入ab cd回车:str1读到空格终止为ab,而ch1读取到缓冲区的字符' ',ascll为32
//gets继续读取到缓冲区的内容cd,ch2读取到回车,ascll为100
char str1[100];char str2[100];char ch1;char ch2;scanf("%s", str1);ch1=getchar();gets(str2);ch2=getchar();printf("str1:%s\n", str1);printf("ch1:%d is %c\n", ch1,ch1);printf("str2:%s\n", str2);printf("ch2:%d\n", ch2);

3.实际案例

int a[5]={1,2,3,4,5},*p;
for(p=a;p<a+5;p++){printf("%d",*p); //指针p指向数组的首地址,每次往后移动一位
}int *q=a;
*p++;//输出为1;
*++p;//输出为2,p指针先往后移动一位再*取值
++*p;//输出为2,p指针先取值为1然后++;

5指针与二维数组

1特点: 二维数组名即为 数组的行地址(行指针)
注意二维数组省行不省列

int a[][4];//这是没问题的*a;//为第一行
*(a+1)=a[1];//为第二行
int *p=a[1];//相当于p指针指向a的第二行首地址

2如何得到具体元素?

1.&a[i][j] //元素地址
a[i][j];// 元素
2.*(a+i)+j //元素地址 ——>*()==[]
所以*(a+i)+j==a[i]+j;
*(*(a+i)+j) //元素
3.a[i]+j //元素地址——>a[i]+j==*(a+i)+j 
*(a[i]+j) //元素

3.测试

int a[3][3]={1,2,3,4,5,6,7,8,9};
1.**a;// 得到第一个元素1
2.*a[1]; //==*(a[1]+0);等价于第二行元素的第一个
还可以写为*(a+1)+0
3.*(*(a+2)+2); //相当于取第三行第三个元素 ==a[2][2]
*(a[2]+2)

在这里插入图片描述
指向二维数组元素的指针:

int a[3][3]={1,2,3,4,5,6,7,8,9};
int m,*p=&a[0][0]; //将a数组的第一个元素地址赋值给p指针——>也可以是*p=a[0]:得到第一行第一个元素:*p=*(a+0)+0
m=*p; //*p得到a数组的第一个元素a[0][0]
m=m*(*(p+2))*(*(p+4)));//前一项是p指针+2指向3得到元素3,后一项为往后移动4位*(p+4)得到元素5:3*5=15
int a[3][3];
int*p=a[1]+1; //第二行第二个元素地址

在这里插入图片描述

6指针数组

本质为数组,数组的每个元素存储的是指针变量,故存储的是地址

int *a[5]; //指针数组
a[0]~a[4]; //每个元素为int类型的指针变量int a[3]={1,2,3};
int b[2]={1,2};
//将ab的地址存储到指针数组中
int *p[2]={a,b};
//获取指针数组中指针变量所指向的元素值
int m=*(p[0]+1); //2
int n=*(p[1]+2); //先得到b数组地址然后往后首地址+2,*()得到元素值

7数组指针

本质为指针,目的:指向一个一维数组(行指针),p指针类型必须与数组类型一致

int*p[3]; //p为指针名,该指针指向一个具有三个元素(三列)的数组指针
int a[2][3];
p=a;
p[1][1]

8地址传递

在这里插入图片描述

9题目

在这里插入图片描述
在这里插入图片描述

无法将数组 a 的地址赋给 a :在 C 语言中,一旦定义了一个数组,它的大小和存储位置都是固定的,无法更改。因此,将 a 的地址赋给 a 是不合法的操作。
在这里插入图片描述
注意*(p++)和 *p++的区别:前者p指针会先往后移动一位,后者先输出p指针目前所指向的值

修改:第三题答案应该是C,指针已经变动了
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/86528.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Zabbix下载安装及SNMP Get使用

帮助文档&#xff1a;6. Zabbix Appliance 一、zabbix下载安装 1、获取Zabbix Appliance镜像 Download Zabbix appliance 2、使用该镜像创建虚拟机 3、打开虚拟机控制台自动安装&#xff0c;等待安装完成即可 默认配置 系统/数据库&#xff1a;root:zabbix Zabbix 前端&am…

django的简易的图书管理系统jsp书店进销存源代码MySQL

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 django的简易的图书管理系统 系统有1权限&#xff1a…

STM32移植ST77891.69寸屏幕并移植lvgl8.0.2(按键输入设备)一些心得

学习目标: 将ST7789(1.69寸圆角屏SPI)驱动移植+lvgl移植+按键当作输入设备 学习内容: 驱动移植lvgl移植按键移植软件使用正片开始: 先说说这块屏幕的介绍呗 ST7789屏幕是一种高性能的液晶显示屏,它具有高清晰度、高亮度、低功耗等优点。它采用了SPI接口通信,可以实现快速…

无涯教程-聚类算法 - K-Means

K-均值聚类算法计算质心并进行迭代&#xff0c;直到找到最佳质心为止&#xff0c;它假定群集的数目是已知的&#xff0c;它也称为扁平聚类算法。通过算法从数据中识别出的簇数以K均值中的" K"表示。 在该算法中&#xff0c;将数据点分配给群集&#xff0c;以使数据点…

python 模块BeautifulSoup 从HTML或XML文件中提取数据

一、安装 Beautiful Soup 是一个HTML/XML的解析器&#xff0c;主要的功能也是如何解析和提取 HTML/XML 数据。 lxml 只会局部遍历&#xff0c;而Beautiful Soup 是基于HTML DOM的&#xff0c;会载入整个文档&#xff0c;解析整个DOM树&#xff0c;因此时间和内存开销都会大很多…

206.Flink(一):flink概述,flink集群搭建,flink中执行任务,单节点、yarn运行模式,三种部署模式的具体实现

一、Flink概述 1.基本描述 Flink官网地址:Apache Flink — Stateful Computations over Data Streams | Apache Flink Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。 2.有界流和无界流 无界流(流): 有定义流的开始,没有定义结束。会无休止…

【Python】从入门到上头—Python基础(2)

文章目录 一.基础语法1.编码2.标识符3.保留字4.注释5.行与缩进6.多行语句7.数字(Number)类型8.字符串(String)9.空行10.等待用户输入11.同一行显示多条语句12.多个语句构成代码组13.print 输出14.import 与 from...import 二.基本数据类型1.变量和赋值2.多个变量赋值3.标准数据…

react-sortable-hoc 拖拽列表上oncick事件失效

const SortableItem SortableElement(({value, onChangePayment}) > {const onClickItem () > {// todo}return (<View className"-item" onClick{onClickItem}>xxxxxxx</View>) })问题&#xff1a;onClick 无效 解决&#xff1a;添加distance

Nexus私有仓库+IDEA配置远程推送

目录 一、docker安装nexus本地私服&#xff0c;Idea通过maven配置deploy本地jar包&#xff08;简单&#xff09; 二、docker push镜像到第三方nexus远程私服&#xff08;shell命令操作&#xff09; 三、springboot通过maven插件自动生成docker镜像并push到nexus私服&#xf…

【java安全】FastJson反序列化漏洞浅析

文章目录 【java安全】FastJson反序列化漏洞浅析0x00.前言0x01.FastJson概述0x02.FastJson使用序列化与反序列化 0x03.反序列化漏洞0x04.漏洞触发条件0x05.漏洞攻击方式JdbcRowSetImpl利用链TemplatesImpl利用链**漏洞版本**POC漏洞分析 【java安全】FastJson反序列化漏洞浅析 …

Matlab进阶绘图第26期—双向堆叠图

双向堆叠图是一种特殊的堆叠图&#xff0c;其通过在两个方向构建堆叠图&#xff0c;从而可以对两种类别的同名及综合属性进行全方位的比较。 由于Matlab中未收录双向堆叠图的绘制函数&#xff0c;因此需要大家自行设法解决。 本文分享一个简单的双向堆叠图的绘制方法&#xf…

聚观早报|2023戴尔科技峰会助力创新;小米汽车电池供应商敲定

【聚观365】8月23日消息 2023戴尔科技峰会助力企业创新 小米汽车电池供应商敲定中创新航和宁德时代 iPhone15预计有6种配色 王小川卸任自动驾驶企业禾多科技董事 特斯拉动力总成副总裁宣布离职 2023戴尔科技峰会助力企业创新 近日“新生万物 数实新格局 —— 2023戴尔科技…