指针C语言

news2024/9/29 9:29:59

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.coloradmin.cn/o/933501.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

同源策略以及SpringBoot的常见跨域配置

先说明一个坑。在跨域的情况下&#xff0c;浏览器针对复杂请求&#xff0c;会发起预检OPTIONS请求。如果服务端对OPTIONS进行拦截&#xff0c;并返回非200的http状态码。浏览器一律提示为cors error。 一、了解跨域 1.1 同源策略 浏览器的同源策略&#xff08;Same-Origin Po…

SpringBoot入门篇2 - 配置文件格式、多环境开发、配置文件分类

目录 1.配置文件格式&#xff08;3种&#xff09; 例&#xff1a;修改服务器端口。&#xff08;3种&#xff09; src/main/resources/application.properties server.port80 src/main/resources/application.yml&#xff08;主要用这种&#xff09; server:port: 80 src/m…

小程序input的placeholder不垂直居中的问题解决

input的placeholder不垂直居中&#xff0c;input设置高度后&#xff0c;使用line-height只能使输入的文字垂直居中&#xff0c;但是placeholder不会居中&#xff0c;反而会偏上。 首先placeholder样式自定义 有两种方法&#xff0c;第一种行内样式&#xff1a; <input ty…

全国首台!浙江机器人产业集团发布垂起固定翼无人机-机器人自动换电机巢

展示突破性创新技术&#xff0c;共话行业发展趋势。8月25日&#xff0c;全国首台垂起固定翼无人机-机器人自动换电机巢新品发布会暨“科创中国宁波”无人机产业趋势分享会在余姚市机器人小镇成功举行。 本次活动在宁波市科学技术协会、余姚市科学技术协会指导下&#xff0c;由浙…

squid服务器

目录 squid初识 安装squid代理 常用命令 主要配置文件 正向代理 环境配置 linux服务器设置 windows客户端设置 反向代理 环境配置 在web服务器配置服务 linux服务器配置 squid初识 含义&#xff1a;squid cache是一个流行的自由软件&#xff08;GNU通用公共许可证…

奥比中光:进击具身智能,打造机器人之眼

大数据产业创新服务媒体 ——聚焦数据 改变商业 跨过奇点的生成式人工智能是一个缸中大脑&#xff0c;只有赋予形体&#xff0c;才能与物理世界产生互动。 在5月的ITF世界半导体大会上&#xff0c;英伟达创世人兼CEO黄仁勋说&#xff0c;人工智能的下一波浪潮将是具身智能。 8…

消息中间件 介绍

MQ简介 MQ,Message queue,消息队列&#xff0c;就是指保存消息的一个容器。具体的定义这里就不类似于数据库、缓存等&#xff0c;用来保存数据的。当然&#xff0c;与数据库、缓存等产品比较&#xff0c;也有自己一些特点&#xff0c;具体的特点后文会做详细的介绍。 现在常用…

TabBar组件如何跳转页面?

1、先引入 2、假数据 const tabs [{key: home,title: 首页,icon: <AppOutline />,badge: Badge.dot,},{key: todo,title: 待办,icon: <UnorderedListOutline />,badge: 5,},{key: message,title: 消息,icon: (active: boolean) >active ? <MessageFill /&…

开源与数据科学:一个完美的组合?

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

如何在VSCode中将html文件打开到浏览器

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Java学数据结构(2)——树Tree 二叉树binary tree 二叉查找树 AVL树 树的遍历

目录 引出什么是树Tree&#xff1f;树的实现二叉树binary tree查找树ADT——二叉查找树Binary Search Tree1.contains方法2.findMax和findMin方法3.insert方法4.remove方法&#xff08;复杂&#xff09;二叉查找树的深度 AVL(Adelson-Velskii和Landis)树——平衡条件(balance c…

元矿山下的音视频应用

// 近年来&#xff0c;矿业的技术和管理模式随着元宇宙的火爆和自动驾驶技术的发展逐渐变化、升级&#xff0c;进而衍生出元矿山的概念&#xff0c;音视频技术也在其中成为了关键一环。LiveVideoStackCon 2023 上海站邀请了来自希迪智驾的任思亮&#xff0c;为大家分享希迪智…

Haproxy+Keepalive 整合rabbitmq实现高可用负载均衡

Haproxy 实现负载均衡 HAProxy 提供高可用性、负载均衡及基于 TCPHTTP 应用的代理&#xff0c;支持虚拟主机&#xff0c;它是免费、快速并且可靠的一种解决方案&#xff0c;包括 Twitter,Reddit,StackOverflow,GitHub 在内的多家知名互联网公司在使用。HAProxy 实现了一种…

Rhino软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 Rhino是一款三维计算机辅助设计&#xff08;CAD&#xff09;软件&#xff0c;由Robert McNeel & Associates公司开发。它被广泛应用于工业设计、建筑设计、珠宝设计、玩具设计等领域&#xff0c;是一款非常流行的三维建模软…

05.sqlite3学习——DML(数据管理:插入、更新、删除)

目录 DML&#xff08;数据管理&#xff1a;插入、更新、删除&#xff09; 插入 更新 删除整个表 语法 实例 DML&#xff08;数据管理&#xff1a;插入、更新、删除&#xff09; 数据操纵&#xff08;DML&#xff09;&#xff1a;用于增、删、改数据 作用&#xff1a;负…

【Git游戏】远程分支

origin/<branch> 远程分支在本地以 origin/<branch>格式存在&#xff0c;他指向上次和远程分支通过时的记录 git checkout origin/<branch> 会出现HEAD分离的情况 与远程通讯 git fetch —— 从远端获取数据&#xff08;实际上将本地仓库中的远程分支更新…

Apache的简单介绍(LAMP架构+搭建Discuz论坛)

文章目录 1.Apache概述1.1什么是apache1.2 apache的功能及特性1.2.1功能1.2.2特性 1.3 MPM 工作模式1.3.1 prefork模式1.3.2 worker模式1.3.3 event模式 2.LAMP概述2.1 LAMP的组成2.2 LAMP各组件的主要作用2.3 LAMP的工作过程2.4CGI和FastCGI 3.搭建Discuz论坛所需4.编译安装Ap…

开源在物联网(IoT)中的应用

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

小研究 - JVM 逃逸技术与 JRE 漏洞挖掘研究(一)

Java语言是最为流行的面向对象编程语言之一&#xff0c; Java运行时环境&#xff08;JRE&#xff09;拥有着非常大的用户群&#xff0c;其安全问题十分重要。近年来&#xff0c;由JRE漏洞引发的JVM逃逸攻击事件不断增多&#xff0c;对个人计算机安全造成了极大的威胁。研究JRE安…

Maven导入包

有些时候maven导入不进去包&#xff0c;这个时候可以去直接去maven仓库找到你需要的包 https://mvnrepository.com/ 在自己本地输入命令 &#xff08;这只是一个样例&#xff0c;请根据自己需要的包参考&#xff09; mvn install:install-file -Dfile"C:/Users//Downloa…