c<8>指针

news2024/11/15 21:42:30

目录

2,指针的赋值

 2.1C语言允许指针赋值为0(初始化)

2.2指针赋值例

2.3输出指针的值

 3,用指针引用数组

 3.1利用指针输入数组

3.2优先级问题 

4.多维数组

5.字符串

 5.1通过指针引用字符串

4.函数中对指针的应用

4.1将指针变量作为函数参数

4.1.1指针的定义

4.1.2指针的引用

4.2将数组传递至函数中

5.函数指针

6.返回指针的函数


1,指针本身是一个地址,以int的形式保存

(32位用四个字节储存,64位操作系统用八个字节储存)

2,指针的赋值

一般来说指针是无法直接赋值的

当然可以用这种形式来强制赋值

(int*) p = 101;

 2.1C语言允许指针赋值为0(初始化)

int* a = 0;

常用 :(防止未初始化指针破化内存

if ( p != 0 )
    *p+1=xxxx;

宏定义

#define NULL 0

2.2指针赋值例

#include<stdio.h>
void main()
{
	char c = '9', * sp1, * sp2;
	sp1 = &c; sp2 = sp1;
	printf("%c", *sp2);
}

2.3输出指针的值

pointer_1=&a;	//把变量a的地址赋给指针变量pointer_1
	pointer_2=&b;	//把变量b的地址赋给指针变量pointer_2 
	printf("a=%d,b=%d\n",a,b);	//输出变量a和b的值
	printf("*pointer_1=%d,*pointer_2=%d\n",*pointer_1,*pointer_2);
	//输出变量a和b的值

 3,用指针引用数组

当我们定义一个数组时

int a[100]={};

 a是数组的首地址,且是以常量指针的形式保存(不能通过a++等来更改

所以当我们针对数组进行一些操作时,通常将之复制到变量指针(P)上。

 3.1利用指针输入数组

#include <stdio.h>
int main()
{	int i,a[10],*p=a;	//p的初值是a,p指向a[0]
	printf("please enter 10 integer numbers:");
	for(i=0;i<10;i++)
	scanf("%d",p++);



	p=a;				//重新使p指向a[0]
	for(i=0;i<10;i++,p++)
	printf("%d ",*p);
	printf("\n");
	return 0;
}

 注意经过一系列 的p++会使得p指向数组的末位。需要读取数组需要重新使指针指向数组的首地址

3.2优先级问题 

++和*为同优先级

从左到右依次执行

4.多维数组

5.字符串

 5.1通过指针引用字符串

#include <stdio.h>
int main()
{	char string[]="I love China!";	//定义字符数组sting
	printf("%s\n",string);		//用%s格式声明输出string,可以输出整个字符串
	printf("%c\n",string[7]);		//用%c格式输出一个字符数组元素 
	return 0;
}

 相当于

#include <stdio.h>
int main()
{	char *string="I love China!";	//定义字符指针变量string并初始化
	printf("%s\n",string);		//输出字符串
	return 0;

4.函数中对指针的应用

4.1将指针变量作为函数参数

4.1.1指针的定义

定义函数时需要同时定义指针变量

void swap(int *p1,int *p2)	
{
...
}

 值得注意的是:如下的*temp不指向变量而直接赋值,由于temp指向位置为随机,可能会覆盖原有数据,计算机并不允许此类操作

//错误示范
void swap(int *p1,int *p2)
{	int *temp;
	*temp=*p1;
 	*p1=*p2;
	*p2=*temp;
}

4.1.2指针的引用

不需要加*

 swap(pointer_1,pointer_2);

4.2将数组传递至函数中

void inv(int x[],int n)		//形参x是数组名
{	int temp,i,j,m=(n-1)/2;
	for(i=0;i<=m;i++)
	{	j=n-1-i;
		temp=x[i]; x[i]=x[j]; x[j]=temp;	//把x[i]和x[j]交换
	}
	return;
}
void inv(int *x,int n)			//形参x是指针变量
{	int *p,temp,*i,*j,m=(n-1)/2;
	i=x; j=x+n-1; p=x+m;
	for(;i<=p;i++,j--)
	{	temp=*i; *i=*j; *j=temp;}	//*i与*j交换
	return;
}

they are the same

5.函数指针

we can use pointers to invoke defined functions

just like

int max(int,int);	//函数声明
int (*p)(int,int);	//定义指向函数的指针变量p

p=max;	//使p指向max函数

c=(*p)(a,b);		//通过指针变量调用max函数

6.返回指针的函数

int *a(int x,int y);

x和y是函数的形参,调用函数可以返回一个Int*型指针

we must return an adress  ##

float *search(float (*pointer)[4],int n)
//形参pointer是指向一维数组的指针变量
{	float *pt;
	pt=*(pointer+n);	//pt的值是&score[k][0]
	return(pt);
}

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

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

相关文章

[附源码]计算机毕业设计车源后台管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Acer W700废物利用- 第一章 - 安装Linux系统Debian 11.5

前言 收拾房子时在犄角旮旯发现了一台N年前的Windows平板&#xff0c;也就是今天的主角&#xff1a;Acer W700 &#xff0c;机器配置是&#xff1a;CPU&#xff1a;I5-3337U&#xff1b;内存&#xff1a;4G&#xff1b;硬盘&#xff1a;128G固态&#xff1b; 插上充电线&…

YOLOv5图像分割--SegmentationModel类代码详解

目录 ​编辑 SegmentationModel类 DetectionModel类 推理阶段 DetectionModel--forward() BaseModel--forward() Segment类 Detect--forward SegmentationModel类 定义model将会调用models/yolo.py中的类SegmentationModel。该类是继承父类--DetectionModel类。 cl…

数学基础从高一开始1、集合的概念

数学基础从高一开始1、集合的概念 目录 数学基础从高一开始1、集合的概念 一、课程引入 解析&#xff1a;方程​编辑2是否有解&#xff1f; 解析&#xff1a;所有到定点的距离等于定长的点组成何种图形&#xff1f; 结论&#xff1a; 二、课程讲解 问题1&#xff1a; 集…

1548_AURIX_TC275_锁步比较逻辑LCL

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这可能是这段时间看过的最简单的一个章节了&#xff0c;所有的章节内容都可以放进这一份笔记也不显得多。 1. 首先明确LCL的意思&#xff0c;其实是锁步核比较器逻辑的意思&#xff0c;还不…

知识点1--认识Docker

IT界2014年之前&#xff0c;对于服务器虚拟化的使用&#xff0c;有过一个流派&#xff0c;基于Windows server系统VMware组成服务器集群&#xff0c;但是后期由于这样的使用方式维护成本相当高&#xff0c;比如服务器的序列、服务器台账以及服务器与服务器之间的切换等等&#…

据说Linuxer都难忘的25个画面

虽然对 Linux 正式生日是哪天还有些争论&#xff0c;甚至 Linus Torvalds 认为在 1991 那一年有四个日子都可以算作 Linux 的生日。但是不管怎么说&#xff0c;Linux 已经 25 岁了&#xff0c;这里我们为您展示一下这 25 年来发生过的 25 件重大里程碑事件。 1991&#xff1a;L…

SpringMVC学习笔记二(获取Cookies、Session和Header、IDEA热部署)

目录 一、一些前置知识 二、SpringMVC获取cookies和session &#x1f351;获取cookies和header &#x1f351;获取session 三、SpringMVC热部署 &#x1f4dd;添加框架支持 &#x1f4dd;settings配置开启自动热部署 &#x1f4dd;开启运行中热部署&#xff1a; &…

【Autopsy数字取证篇】Autopsy案例创建与镜像分析详细教程

【Autopsy数字取证篇】Autopsy案例创建与镜像分析详细教程 Autopsy是一款非常优秀且功能强大的免费开源数字取证分析工具。—【蘇小沐】 文章目录【Autopsy数字取证篇】Autopsy案例创建与镜像分析详细教程1.实验环境2.Autopsy下载安装&#xff08;一&#xff09;创建案例1.软件…

【简单易操作】图漾TM460-E2深度网络相机在ROS-melodic环境下的配置过程

目录一、配置的环境二、下载内容及链接三、ubuntu环境配置下载 Camport3 SDK安装依赖编译运行四、安装OpenNI2套件下载 Camport3 OpenNI2 SDK安装 Camport3 OpenNI2 SDK五、ROS平台安装下载 Camport3 ROS SDK编译配置环境变量运行一、配置的环境 相机型号&#xff1a;TM460-E2…

OpenRASP agent源码分析

目录 前言 准备 源码分析 1. manifest 2. agent分析 3. agent卸载逻辑 总结 前言 笔者在很早前写了(231条消息) OpenRASP Java应用自我保护使用_fenglllle的博客-CSDN博客 实际上很多商业版的rasp工具都是基于OpenRASP的灵感来的&#xff0c;主要就是对核心的Java类通过…

堆(二叉堆)-优先队列-数据结构和算法(Java)

文章目录1 概述1.1 定义1.2 二叉堆表示法2 API3 堆相关算法3.1 上浮&#xff08;由下至上的堆有序化&#xff09;3.2 下沉&#xff08;由上至下的堆有序化&#xff09;3.3 插入元素3.4 删除最大元素4 实现5 性能和分析5.1 调整数组的大小5.2 元素的不可变性6 简单测试6 后记1 概…

2006-2020年全国31省人口老龄化水平

2006-2020年全国31省人口老龄化 1、时间为2006-2020年 2、来源&#xff1a;人口与就业年鉴 3、数据缺失情况说明&#xff1a; 其中2010年存在缺失&#xff0c;采用线性插值法进行填补&#xff0c;内含原始数据、线性插值 4、计算说明&#xff1a;以城镇地区老年抚养比衡量…

uImage的制作过程详解

1、uImage镜像介绍 参考博客&#xff1a;《vmlinuz/vmlinux、Image、zImage与uImage的区别》&#xff1b; 2、uImage镜像的制作 2.1、mkimage工具介绍 参考博客&#xff1a;《uImage的制作工具mkimage详解(源码编译、使用方法、添加的头解析、uImage的制作)》&#xff1b; 2.2…

软路由搭建:工控机(3865U)安装esxi并在esxi上创建iStoreOS做主路由(网卡直通)

一、硬件介绍 1、工控机&#xff08;3865U&#xff09; CPU&#xff1a;3865U 内存&#xff1a;8G 硬盘&#xff1a;120G 网卡&#xff1a;六口网卡 2、无线路由器&#xff08;荣耀路由器pro2&#xff09; 3、主机 下载资料、制作启动盘、系统设置 4、U盘 至少8G以上 …

ConcurrentHashMap 1.7与1.8的区别

ConcurrentHashMap 与HashMap和Hashtable 最大的不同在于&#xff1a;put和 get 两次Hash到达指定的HashEntry&#xff0c;第一次hash到达Segment,第二次到达Segment里面的Entry,然后在遍历entry链表 从1.7到1.8版本&#xff0c;由于HashEntry从链表 变成了红黑树所以 concurr…

Python Gui之tkinter(下)

6.Radiobutton单按按钮 Radiobutton控件用于选择同一组单选按钮中的一个。Radiobutton可以显示文本&#xff0c;也可以显示图像。 7.Checkbutton复选按钮 Checkbutton控件用于选择多个按钮的情况。Checkbutton可以显示文本&#xff0c;也可以显示图像。 经典的Gui类的写法&a…

关于liunx 宝塔运行php项目

文章目录前言一、申请liunx服务器安装宝塔环境二、安装php看你自己安装需要的版本三.php文件创建四.数据库创建五.访问项目就可以了前言 自己研究学习&#xff0c;大佬勿喷 一、申请liunx服务器安装宝塔环境 我是线上安装的都一样看个人习惯爱好吧 等待安装完成提示地址和账…

Java基础—重新抛出异常

重新抛出异常 在catch块内处理完后&#xff0c;可以重新抛出异常&#xff0c;异常可以是原来的&#xff0c;也可以是新建的&#xff0c;如下所示&#xff1a; try{ //可能触发异常的代码 }catch(NumberFormatException e){ System.out.println("not valid numbe…

电子印章结构以及规范讲解

前言 为了确保电子印章的完整性、不可伪造性&#xff0c;以及合法用户才能使用&#xff0c;需要定义一个安全的电子印章数据格式&#xff0c;通过数字签名&#xff0c;将印章图像数据与签章者等印章属性进行安全绑定&#xff0c;形成安全电子印章 电子印章&#xff1a;一种由…