java char指针数组_简单总结C语言中各种类型的指针的概念

C语言中有很多关于指针的使用,指针也是C语言的灵魂所在,而且C语言中也有很多有关指针的概念,这里学习并总结了一些知道的概念。

常量指针:首先它是一个指针,常量只是用来修饰指针的定语。其定义如下:

char const * cp;

char a='a';

如何识别呢?根据右结合优先,先是*优先,所以这个cp变量是一个指针,然后是const修饰*,所以这是一个常量指针。即指向常量的指针。

cp=&a; //正常语法

*cp=a; //错误语法,因为其指向的值是一个常量

指针常量:首先它是一个常量,指针是用来修饰常量的,即常量的值为一个指针地址。

char * const cp;

char a='a';

如何识别呢?根据右结合优先,先是const优先,所以这个cp变量是一个常量,然后是*修饰const,所以这是一个指针常量。

cp=&a; //错误语法,因为其地址为是一个常量

*cp=a; //正确,地址所指向的内容是一个普通字符

指针数组:首先它是一个数组,指针是用来修饰数组内容的,表示什么样的数组 :即存放指针的数组

char *arr[3] = {"1","123","345"};

如何识别,因为[]的优先级大于*,所以先是定义为一个数组,而后由*来修饰这个数

printf("arr0%c\n",*arr[0]);

printf("arr1%s\n",arr[1]);

数组指针:首先它是一个指针,数组是修饰指针的,即指向数组的指针。

char (*p)[3]; //申明时不能同时初始化

char arr[3] = {'1','4','7'};

p=&arr; //指向数组的首地址,同时指针的类型是char * [3] 类型的,即加1操作后为sizeof(char [3])三个字节数

如何识别:因为这次添加了一个显示优先,所以这次先是一个指针,而后[]修饰指针

printf("%c\n",(*p)[0]); //先取arr的首地址,再根据这个地址取数组内容

printf("%c\n",(*p)[1]);

printf("%c\n",(*p)[2]);

printf("%c\n",*((char*)p+0)); //先转换为char指针,再取值

printf("%c\n",*((char*)p+1));

printf("%c\n",*((char*)p+2));

printf("%c\n",((char*)p)[0]); //先转换为char指针,再取数组的值,和第一个类似

printf("%c\n",((char*)p)[1]);

printf("%c\n",((char*)p)[2]);

函数指针:首先它是一个指针,函数是修饰指针的,即指向函数的指针。

char (*func)(void); //定义函数指针

char test(void)

{

return 'A';

}

func = test; //初始化赋值

printf("test address: %p\n",test);

printf("func address: %p\n",func);

char ch = func(); //调用

printf("%c\n", ch);

如何识别,同数组指针一样,因()的优先级,所以这个定义首先是一个指针,而后才是对指针的描述,即一个指向函数的指针,其指向的函数也是规定的:即返回的是字符类型,不需要传入参数

指针函数:首先它是一个函数,指针修饰函数的返回类型,即一个返回指针的函数

char *func(void);

如何识别,因为没有扩弧,所以*的优先级没有右边的扩弧优先级高,所以先是规定了一个函数,*只是修饰返回值的

char *func(void) {

char *str = "test";

return str;

}

void main() {

char *test = func();

printf("%s\n",test);

}

结构体指针:当然其原先也是一个指针,只不过就是指向了结构体而已。故而为结构体指针。

指针结构体:指针结构体,其实也没有必要有这个概念,无非就是带有指针作为子项的结构体。

指针类型转换:指针类型转换是个有意思的东西,你可以把一个int型的指针转换为char类型,然后再把char类型的指针转换为int型;就像普通的字符和int型之间的转换一样。但指针转换后其值没有变,唯一变的东西就是指针的步长,即进行指针运算时的计算方式。当为char指针时其运算单位均以1个字节为1个运算单位,而当为int指针时通常都是以4个字节为1个运算单位。

指针算术:根据上面的指针类型转换介绍可知,不同的指针类型进行算术运算时其计算方式时不相同的,其不同之处就在于其步长的字节数不同,而具体其步长为几个字节数是以其指针类型决定的,指向char的指针步长即为1。通常的指针运算有指针与数字的加减运算,相同类型的指针的减法运算,而且还要是指向同一个数组的,不然意义不大。同理推得不同类型的指针进行运算意义更不大,甚至会报错。

下面举一个指针算术的例子,交换两个变量值不利用额外变量

毕竟new关键字还是申请了额外的内存,虽然没有申请变量,换汤未换药

int *a,*b;

a=new int(10); //给指针赋值

b=new int(20); //a=0x00030828,b=0x00030840

a=(int*)(b-a); //a=0x00000006

b=(int*)(b-int(a)); //b=0x00030828

a=(int*)(b+int(a)); //a=0x00030840

只是交换变量的话也可以:

int a = 4;

int b = 5;

*(((char*)&a)+1) = *((char*)&b);

*((char*)&b)=*((char*)&a);

*((char*)&a)=*(((char*)&a)+1);

*(((char*)&a)+1)=0;

指针参数:指针参数就是指,指针作为函数的参数进行传递,因为C语言只支持单向传值,且返回值只能是一个值类型,所以想要从函数内返回多个内容或者与函数体有一个共同的数据操作区域,那这个时候就可以考虑通过传指针参数的方式了。传指针也是传值,只不过这时的值为指针指向的地址,也就是一个int整数。通过传递一个地址后就可以对一个共同的区域进行操作和数据共享了。

指针指针:指针的指针就是指向指针的指针,同理还有指向指针指针的指针;不过一般人的思维能做二级、三级的指针的就很好了。这里主要是扩展一下指针与多维数组的关联关系。从个别到一般来分解多维数组的处理。这里个别肯定是用二维数组来举个例子,那就可以延伸到多维数组。

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

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

相关文章

【渝粤题库】陕西师范大学202081 管理学 作业 (专升本、高起本、高起专)

《管理学〉作业 一、判断改错 1.使管理科学从重视对物的研究转向重视对人的研究的理论是马斯洛的需求层次理论。 2.根据亨利明茨伯格的研究,管理者扮演的决策方面的角色包括组织发言人、纠纷调解者、资源分配者和谈判者…

【渝粤题库】陕西师范大学202961 教育社会学 作业(高起本、专升本)

《教育社会学》作业 一、 单项选择题 1.从研究对象上讲,教育社会学探究的主要是 A.广义教育 B.中观教育 C.狭义教育 D.社会教育 2.教育社会对自身以外的其他社会现象所发生的功能是 A.教育社会的外功能 B.教育社会的内功能 C.教育社会的负功能…

java 面试指南_Java面试参考指南–第1部分

java 面试指南JAVA面向对象的概念 Java in基于面向对象的概念,它允许更高级别的抽象以实际方式解决任何问题。 面向对象的方法将实际对象中的问题解决方案概念化,更易于在整个应用程序中重用。 例如椅子,风扇,狗,电脑…

java 提交的内存_Java使用内存映射实现大文件的上传

在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如下为一个对比实验。package test;import java.io.BufferedInputStream;import java.io.FileIn…

【渝粤题库】陕西师范大学210006幼儿园课程作业(高起专)

《幼儿园课程》(专科)作业 一、单选题 1、活动课程是以( )为中心来组织学习内容的。 A 学科 B 问题 C 概念 D 儿童 2、( )指的是幼儿园教师根据实际情况灵活的将课程方案转化为生动的课程实践(现…

创建一个安全的Spring REST API

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 “如果有用,它将被修改。” 这些智慧之言来自我的QA老师,他们…

【渝粤题库】陕西师范大学292071社会统计学作业(高起专)

《社会统计学》作业 一、单项选择题 1、从历史上看,在社会经济统计学的形成过程中,首先使用“统计学”这一术语的是( )。 A. 政治算术学派 B. 国势学派 C. 数理统计学派 D. 社会经济统计学派 2、社会统计的研究对象是(…

java并发编程十 原子累加器和Unsafe

文章目录 原子累加器cas 锁原理之伪共享 UnsafeUnsafe CAS 操作 原子累加器 累加器性能比较 private static <T> void demo(Supplier<T> adderSupplier, Consumer<T> action) {T adder adderSupplier.get();long start System.nanoTime();List<Thread…

mysql select 返回列_SQL / mysql – selectdistinct / UNIQUE,但返回所有列?

你正在寻找一个组&#xff1a;select * from table group by field1偶尔可以写一个独特的声明&#xff1a;select distinct on field1 * from table然而&#xff0c;在大多数平台上&#xff0c;上述两者都不会起作用&#xff0c;因为其他列上的行为是未指定的。 (MySQL中的第一…

【渝粤题库】陕西师范大学300018 世界史(下)

《世界史&#xff08;下&#xff09;》作业 一、名词解释 1、三权分立 2、考迪罗 3、斯大林格勒会战 4、马歇尔计划 5、匈牙利事件 6、美第奇家族 7、明治维新 8、人文主义 9、古巴导弹危机 10、奴隶贸易 11、七年战争 12、大西洋宪章 13、重商主义 14、文官制度 15、《解放宣言…

【渝粤题库】陕西师范大学600002 物理化学(下) 作业(专升本)

《物理化学&#xff08;下&#xff09;》作业 一.选择题 1.已知298 K时&#xff0c;(NH4)2SO4.NaOH.Na2SO4的 分别为3.064 10-2. 2.451 10-2.2.598 10-2 Sm2 mol-1&#xff0c;则NH4OH的为 ( ) A. 1.474 10-2 B. 2.684 10-2 C. 2.949 10-2 D. 5.428 10-2 2.质量摩尔浓度…

java中的规范是什么意思_Java中的异常规范有什么好处?

我从C来到Java.在Java和C中,我们都可以指定异常.看起来像这样&#xff1a;void function_name() throw(Exception){...if (error){throw Exception("Error");}...}据我所知,在C中编写异常规范被认为是一种不好的做法.与C不同,在Java中,我们必须这样做.所以,我的问题是…

jpa中::::_项目学生:JPA标准查询

jpa中::::这是Project Student的一部分。 其他职位包括带有Jersey的Webservice Client&#xff0c;带有Jersey的 Webservice Server &#xff0c; 业务层 &#xff0c; 具有Spring Data的持久性 &#xff0c;分片集成测试数据和Webservice Integration 。 我们已经介绍了CRUD的…

【渝粤题库】陕西师范大学800011 专题地图制图

《专题地图制图》作业 一、名词解释 1、专题地图 2、范围法 3、绝对比率符号 4、电子地图 5、普通地图 6、质底法 7、分级统计图法 8、条件比率符号 9、视觉重力 10、定位图表法 11、连续比率符号 12、互补色 二、填空 1、专题地图按照内容的概括程度可以分为 、 、 。 2、专题…

国家开放大学2021春1098中学数学教学研究题目

教育 教育 试卷代号&#xff1a;1098 2021年春季学期期末统一考试 中学数学教学研究 试题 2021年7月 一、填空题&#xff08;本题共20分&#xff0c;每个空2分&#xff09; 1&#xff0e;布卢姆把认知领域的目标分为 、 、 、________4个等级目标。 2&#xff0e;中学数学教学…

java 注解scheduler_使用spring的@Scheduled注解执行定时任务,启动项目不输出警告

在applicationContext.xml中添加&#xff1a;xmlns:task"http://www.springframework.org/schema/task"xsi:schemaLocation"http://www.springframework.org/schema/taskhttp://www.springframework.org/schema/task/spring-task-4.0.xsd">java代码&…

具有ELK的APIGEE API网关日志管理(Elastic Search,Logstash和Kibana)

在本文中&#xff0c;我们将看到如何使用 Elastic Search &#xff0c; Logstash 和 Kibana 管理APIGEE API网关生成的日志 。 下图突出显示了日志数据如何流经ELK堆栈以进行数据可视化和监视。 作为API网关的一部分&#xff0c;我们将使用MessageLogging策略在代理流&#xf…

【渝粤题库】陕西师范大学209010 现代教育战略 作业 (专升本)

《现代教育战略》作业 一、辨析题 1.战术是战略的具体表现形式&#xff0c;二者是一般和特殊的关系。 2.政治品德素质是一个人对国家、民族的政治意识、立场&#xff0c;是一个人的道德好感&#xff0c;是不可教的。 3.创新的新就一般意义的新事物。 4.能力就是一个所拥有的知识…

【渝粤教育】电大中专混凝土结构题库作业 题库

1.题结构试验时&#xff0c;试件的就位型式最符合实际受力状态而应优先采用的是() A.反位试验 B.正位试验 C.卧位试验 D.异位试验 正确 正确答案&#xff1a;左边查询 学生答案&#xff1a;B 2.非破损检测技术可应用于混凝土、钢材和砖石砌体等各种材料组成的结构构件的结构试验…

java中PL层_安装pljava - RuralHunter的个人空间 - OSCHINA - 中文开源技术交流社区

pljava是pgsql跟java的桥接&#xff0c;安装以后就可以在pgsql里面调用java了。这里记录一下我在ubuntu server下安装的过程1. 下载源码编译很简单&#xff0c;下载&#xff0c;解压&#xff0c;设置一下JAVA_HOME(如果没设的话)&#xff0c;然后make2. 把生成的build目录里面的…