指针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.rhkb.cn/news/108535.html

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

相关文章

keepalived+lvs(DR)

目录 一&#xff0c;作用 二&#xff0c;调度器配置 1&#xff0c;安装keepalived 2&#xff0c; 安装ipvsadm 3&#xff0c; 配置keepalived 4. 查看lvs节点状态 5&#xff0c; web节点配置 1.1 调整ARP参数 1.2 配置虚拟IP地址 1.3添加回环路由 1.4安装nginx并写…

机器学习实战之模型的解释性:Scikit-Learn的SHAP和LIME库详解

引言&#xff1a;机器学习模型的“黑箱”困境 机器学习模型的崛起让我们惊叹不已&#xff01;不论是预测房价、识别图片中的猫狗&#xff0c;还是推荐给你喜欢的音乐&#xff0c;这些模型都表现得非常出色。但是&#xff0c;有没有想过&#xff0c;这些模型到底是如何做出这些决…

echarts 甘特图一组显示多组数据

<template><el-button type"primary" click"addlin">添加线</el-button><el-button type"success" click"addArea">添加区域</el-button><div ref"echart" id"echart" class&qu…

自学设计模式(类图、设计原则、单例模式 - 饿汉/懒汉)

设计模式需要用到面向对象的三大特性——封装、继承、多态&#xff08;同名函数具有不同的状态&#xff09; UML类图 eg.—— 描述类之间的关系&#xff08;设计程序之间画类图&#xff09; : public; #: protected; -: private; 下划线: static 属性名:类型&#xff08;默认值…

Linux(基础IO、文件权限、Makefile)

目录 1、man 手册 1.1 汉化 1.2 具体使用 2、文件权限 2.1 权限理解 2.2 文件详细信息查询 2.3 权限更改 3、常用函数接口 3.1 open 3.2 read 3.3 write 3.4 close 3.5 函数使用示例 4、make与Makefile 4.1 make 与 Makefile区别 4.2 Makefile的编写 5、vim简…

Git 原理与使用

1.版本控制器 所谓的版本控制器&#xff0c;就是能让你了解到⼀个⽂件的历史&#xff0c;以及它的发展过程的系统。通俗的讲就是⼀个可以记录⼯程的每⼀次改动和版本迭代的⼀个管理系统&#xff0c;同时也⽅便多⼈协同作业。 ⽬前最主流的版本控制器就是 Git 。Git 可以控制电脑…

四、Kafka Broker

4.1.1 Zookeeper 存储的 Kafka 信息 4.1.2 Kafka Broker 总体工作流程 4.2 生产经验 - 节点的服役和退役 自己的理解&#xff1a;其实就是将kafka的分区&#xff0c;负载到集群中的各个节点上。 1、服役新节点 2、退役旧节点 4.3 kafka副本 1、副本的作用 2、Leader的选…

Java设计模式-状态模式

1.概述 定义&#xff1a; 对有状态的对象&#xff0c;把复杂的“判断逻辑”提取到不同的状态对象中&#xff0c;允许状态对象在其内部状态发生改变时改变其行为。 【例】通过按钮来控制一个电梯的状态&#xff0c;一个电梯有开门状态&#xff0c;关门状态&#xff0c;停止状…

论文笔记: MOGRIFIER LSTM

2020 ICLR 修改传统LSTM 当前输入和隐藏状态充分交互&#xff0c;从而获得更佳的上下文相关表达 1 Mogrifier LSTM LSTM的输入X和隐藏状态H是完全独立的 机器学习笔记&#xff1a;GRU_gruc_UQI-LIUWJ的博客-CSDN博客这篇论文想探索&#xff0c;如果在输入LSTM之前&#xf…

前端需要理解的跨平台知识

混合开发是指使用多种开发模开发App的一种开发模式&#xff0c;涉及到两大类技术&#xff1a;原生 Native、Web H5。原生 Native 主要指 iOS&#xff08;Objective C&#xff09;、Android&#xff08;Java&#xff09;&#xff0c;原生开发效率较低&#xff0c;开发完成需要重…

Nginx的搭建与核心配置

Nginx的搭建与核心配置 1、IO模型1.1I/O 模型相关概念1.2网络I/O模型1.2.1阻塞型I/O模型1.2.2非阻塞型I/O模型1.2.3多路复用I/O型1.2.4信号驱动式I/O模型1.2.5异步I/O模型 2、Nginx概述2.1Nginx功能介绍2.2基础特性2.3Web服务相关的功能2.4Nginx进程结构2.4Nginx模块2.5Nginx三…

人工智能项目集合推荐(数据集 模型训练 C++和Android部署)

人工智能项目集合推荐(数据集 模型训练 C和Android部署) 目录 人工智能项目集合推荐(数据集 模型训练 C和Android部署) 1.三维重建项目集合 ★双目三维重建 ★结构光三维重建 2.AI CV项目集合 ★人脸检测和人体检测 ★人体姿态估计(人体关键点检测) ★头部朝向估计 …

Java多线程与并发编程

课程地址&#xff1a; https://www.itlaoqi.com/chapter.html?sid98&cid1425 源码文档&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1WMvM3j6qhyjIeAT87kIcxg 提取码&#xff1a;5g56 Java多线程与并发编程 1-并发背后的故事什么是并发 2-你必须知道线程的概念程…

【RISC-V】RISC-V寄存器简介

一、通用寄存器 32位RISC-V体系结构提供32个32位的整型通用寄存器寄存器别名全称说明X0zero零寄存器可做源寄存器(rs)或目标寄存器(rd)X1ra链接寄存器保存函数返回地址X2sp栈指针寄存器指向栈的地址X3gp全局寄存器用于链接器松弛优化X4tp线程寄存器常用于在OS中保存指向进程控…

第十三课 宾语从句

文章目录 前言一、宾语从句1、主语及物动词宾语从句2、主语双宾动词间接宾语直接宾语3、主语特定及物动词宾语从句&#xff08;作宾语&#xff09;宾补4、主语be某些形容词宾语从句5、动词不定式后面的宾语从句6、动名词后面的宾语从句7、介词后面的宾语从句9、间接引语 前言 一…

[Go版]算法通关村第十四关白银——堆高效解决的经典问题(在数组找第K大的元素、堆排序、合并K个排序链表)

目录 题目&#xff1a;在数组中找第K大的元素解法1&#xff1a;维护长度为k的最小堆&#xff0c;遍历n-k个元素&#xff0c;逐一和堆顶值对比后&#xff0c;和堆顶交换&#xff0c;最后返回堆顶复杂度&#xff1a;时间复杂度 O ( k ( n − k ) l o g k ) O(k(n-k)logk) O(k(n−…

Redis各类数据结构应用场景总结

Redis各类数据结构应用场景总结 引言String应用场景 List应用场景 Hash应用场景 Set应用场景 ZSet应用场景 小结 引言 实际面试过程中更多看重的是对Redis相关数据结构的活学活用&#xff0c;同时也可能会引申出Redis相关底层数据结构原理的实现&#xff0c;笔者最近面试过程中…

高效公文校对与文字处理:走进自然语言技术的新时代

在数字化时代的浪潮中&#xff0c;无论是政府材料、新闻稿、还是发言稿&#xff0c;高质量的文字内容成为了信息传递的核心。为了确保内容的专业性和准确性&#xff0c;公文校对和文字处理技术的进步成为了不可或缺的关键。本文将深入探讨自然语言处理技术如何为公文校对和文字…

DMK5框选变量之后不显示其他位置的此变量高亮

使用软件MDK5.3.8版本 如下在2的位置选择之后&#xff0c;其他同样的变量没有高亮&#xff0c;因为1的原因折叠了&#xff1b; 展开折叠之后就可以了

如何使用CSS实现一个水平居中和垂直居中的布局?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 水平居中布局⭐ 垂直居中布局⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣…