C语言指针学习(续)

五、数组和指针的关系

int array[10] = {0,1,2,3,4,5,6,7,8,9},value;
...
...
value = array[0];//也可以写成 value = *array;value = array[3];//也可以写成 value = *(array+3);value = array[4];//也可以写成 value = *(array+4);

  上例中,一般而言,数组名array代表数组本身,类型是int[10];如果把array看作指针的话,它指向数组的第0个单元,类型是int *,所指向的类型是数组单元的类型 int ,因此*array = 0 就一点也不奇怪了。同理,(array+3)指向数组单元的第三个指针,所以*(array+3) = 3 ;

  

char *str[3] = {
"Hellp,this is a sample",
"Hi ,good morning ",
"Hello world"
};char s[80];
strcpy(s,str[0]);//也可以写成 strcpy(s,*str);
strcpy(s,str[1]);//也可以写成strcpy(s,*(str+1));

  上例中,str是一个三单元的数组,该数组的每个单元都是一个指针,这些指针每个都指向一个字符串,如果把数组名看作指针的话,它指向数组的第0号元素,类型是char** ,指向的类型是 char *;

*str 也是一个指针,它的类型是char*,指向的类型是char ,它指向的地址是字符串 “Hello,this is a sample”的第一个字符H的地址。*(str+1)也是一个指针,他的类型是char*,指向的类型是char,指向“Hi,good morning”的第一个字符H的地址。

  在不同的表达式中,数组名array可以扮演不同的角色 。在表达式sizeof(array)数组名array 代表数组本身,故测出的是整个数组的大小。在表达式*array中,array扮演的是一个指针,所以该表达式就是数组第0号单元的值。sizeof(*array)测出的是数组单元的大小。表达式array+n,array扮演的是指针,故array+n也是指针,他的类型是type*,指向的类型是type,指向数组第n号单元,故sizeof(array+n)测出的是指针类型的大小。

六、指针和结构类型的关系

struct mystruct
{int a ;int b;int c;          
}mystruct ss = {20,30,40};
mystruct *ptr = &ss;//声明了一个指向结构对象ss的指针,它的类型是myStruct * ,指向的类型是mystructint *pstr = (int *)&ss//声明了一个指向结构对象ss的指针。但是他的类型和它指向的类型和ptr是不同的,请问如何通过指针ptr来访问ss的三个成员变量

  答案:

ptr ->a;
ptr ->b;
ptr ->c;请问如何通过指针pstr来访问ss的三个成员变量
答案*pstr;
*(pstr+1);
*(pstr+2);

  这样使用pstr来访问结构成员是不正规的。那么该怎么样来通过指针访问数组的各个单元呢?

int array[3]={35,56,37};
int *pa = array;
//通过指针pa访问数组array的三个单元的方法是:
*pa;
*(pa+1);
*(pa+2);

  从格式上看倒是与通过指针访问结构成员的不正规方法的格式一样.所有的C/C++编译器在排列数组的单元时,总是把各个数组单元存放在连续的存储区里,单元和单元之间没有空隙。但在存放结构对象的各个成员时,在某种编译环境下,可能会需要字对齐或双字对齐或者是别的什么对齐,需要在相邻两个成员之间加若干个“填充字节”,这就导致各个成员之间可能会有若干个字节的空隙。所以,在例十二中,即使*pstr访问到了结构对象ss的第一个成员变量a,也不能保证*(pstr+1)就一定能访问到结构成员b。因为成员a和成员b之间可能会有若干填充字节,说不定*(pstr+1)就正好访问到了这些填充字节呢。这也证明了指针的灵活性。要是你的目的就是想看看各个结构成员之间到底有没有填充字节,嘿,这倒是个不错的方法。

 

转载于:https://www.cnblogs.com/kui0621/p/4064032.html

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

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

相关文章

access 根据id删除数据_小程序云开发之数据库自动备份丨云开发101

钻石有价,数据无价。我们通常会把重要的业务数据存放在数据库中,并需要对数据库做定时的自动备份工作,防止数据异常丢失,造成无法挽回的损失。小程序云开发提供了方便的云数据库供我们直接使用,云开发使用了腾讯云提供…

国家职业资格计算机调试维修技师试题,电工国家职业资格三级(高级)理论试题...

电工国家职业资格三级理论试题一、单选题(第1题~第60题。选择一个正确的答案,将相应的字母填入题内的括号中。每题1.0分,满分60分。)1.异步测速发电机的空心杯转子是用( )材料做成的。(A)低电阻 (B)高电阻 (C)低导磁 (D…

PHP解决方案@时间差异计算函数

为什么80%的码农都做不了架构师?>>> 方案解决目标:计算时间差异 function ago($time){ $periods array("second","minute","hour","day","week","month","year",…

baidumap vue 判断范围_vue 数据渲染

本文转载于 SegmentFault 社区社区专栏:山外de楼作者:山外de楼前言 vue 是如何将编译器中的代码转换为页面真实元素的?这个过程涉及到模板编译成 AST 语法树,AST 语法树构建渲染函数,渲染函数生成虚拟 dom,…

spring+websocket综合(springMVC+spring+MyBatis这是SSM框架和websocket集成技术)

java-websocket该建筑是easy。儿童无用的框架可以在这里下载主线和个人教学好java-websocket计划: Apach Tomcat 8.0.3MyEclipsemavenJDK1.7: http://download.csdn.net/detail/up19910522/7719087 spring4.0以后增加了对websocket技术的支持&#xff0c…

电子计算机可直接执行的指令机器内部是以,电子计算机可直接执行的指令在机器内部是以( )表示....

问题:电子计算机可直接执行的指令在机器内部是以( )表示.更多相关问题实际GDP衡量的是在特定年度内生产的最终产品与服务的价值,使用________。A.基年价格B.当年价格C.岗位评价结果的形式多种多样,但最值得…

Audit(查看审核/审计信息)

2013需要到 网站集管理-网站集审核设置 中设置要开启的审核项,开启之后sharepoint才会记录信息,信息存储在contentDB的AuditData中; 去读审计信息的sharepoint代码如下: 1 using (SPSite site new SPSite(SiteUrl))2 {3 usin…

jtoken判断是否包含键_Redis 数据库、键过期的实现

今天看看作为内存数据库,Redis 是怎么存储数据的以及键是怎么过期的。阅读这篇文章你将会了解到:Redis 的数据库实现Redis 键过期的策略数据库的实现我们先看代码 server.h/redisServerstruct redisServer{ ... //保存 db 的数组 redisDb *db; //db 的数…

JBoss配置详解

为什么80%的码农都做不了架构师?>>> 2.0.1 JBOSS 的一点说明 $JBOSS-HOME/server/下有3个目录,all/default/minimal,它们是表示3种配置,全部的配置、默认配置、最小配置,我们在启动JBOSS服务时&#xff0c…

计算机等级考试2010,2010年全国计算机等级考试相关政策

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼二级QBASIC 21 120 60二级FORTRAN 22 120 60 不接受新考生报名二级C 24 120 60二级FOXBASE 25 120 60二级VB 26 90 90二级VFP 27 90 90三级PC技术 33 120 60三级信息管理技术 34 120 60三级网络技术 35 120 60三级数据库技术 36 12…

ACE(Adaptive Communication Environment)介绍

转自 http://blog.csdn.net/huangyong19870618/article/details/4954512 Adaptive Communication Environment(自适配通信环境),简称ACE。为一个以C的Template技术所做成的开放源代码的可跨平台的网络应用程序的程序库套件。 相关书籍   T…

rpn产生proposals_一文读懂RPN和ROI Align

rpn和roi align是two-stage detector中比较关键的两个操作,这两个操作将two-stage detector中的两个stage连接起来,变成end-to-end(端到端)的网络,同时也给整个检测方法的性能带来提升。rpn为roi align提供高质量的候选框,即propo…

多个相同参数表单提交

前情提要: 现在需要使用异步提交表单数据(QueryString方式),但数据个数比较多,一个个拼接比较麻烦,这时可以使用jQuery的方法$("form").serialize()对表单进行序列化。但是如果这时&#xff0c…

简单仿百度自动搜索框

body中 <body> 请输入搜索内容:<input type"text" name"name" value"" id"txt" style"border:1px solid gray;margin:0;padding:0; width:200px;" /></body> View Code<script>中 <script type&…

layui上传文件请求接口异常_SpringMVC实现文件上传与下载,拦截器,异常处理

第一章&#xff1a;响应数据和结果视图1. 返回字符串Controller方法返回字符串可以指定逻辑视图的名称&#xff0c;根据视图解析器为物理视图的地址。RequestMapping(value"/hello")public String sayHello() {System.out.println("Hello SpringMVC!!");//…

球星测试软件,2KOL球星测评丨篮球之神,迈克尔.乔丹(96版)

迈克尔.乔丹(96版)迈克尔乔丹在在1984年NBA选秀中于第1轮第3位被芝加哥公牛队选中。(他的前面两位分别是哈基姆奥拉朱旺和萨姆鲍伊)91-93赛季&#xff0c;乔丹连续2次荣膺常规赛MVP和3次总决赛FMVP &#xff0c;并率领芝加哥公牛队首夺3连冠。 93年10月6日因父亲被害而宣布退役…

iphone无线充电充电测试软件,瞎折腾星人的测评 篇一:想体验iPhone的无线充电?这可能是最具性价比的选择了!...

瞎折腾星人的测评 篇一&#xff1a;想体验iPhone的无线充电&#xff1f;这可能是最具性价比的选择了&#xff01;2018-11-28 00:26:032点赞2收藏0评论最近恰逢更换新手机&#x1f4f1;iPhone XS Max的重大活动&#xff0c;功臣iPhone 7退居二线&#xff0c;女票突然脑子一热要给…

Gson读写JSON 数据

一、创建实体&#xff1b; package com.bo.entity;public class ShiTiInFo {private String shitia; //试题名称private String shitib; //大题名称private String shitic; //小题名称private String shitid; //试题题号private int shitie; //试题小号public String getShitia…

poj 2431

大意&#xff1a; 有n个加油点&#xff0c;给出每个加油点距离终点的位置和能加多少油&#xff0c;最后一行给出总长度和最初的油量。求最少加几次油能到终点&#xff0c;不能到的话输出-1. Sample Input 4 4 4 5 2 11 5 15 10 25 10Sample Output 2分析&#xff1a; 一开始打算…

cts游戏手机版_cts游戏

cts游戏是一款非常逼真的驾驶模拟游戏&#xff0c;它以经典的驾驶和运输为主题&#xff0c;通往不同城市拥有不同的运输路线玩家们可以在驾驶过程中欣赏风景&#xff0c;感受全新的天气变化&#xff0c;当天气不好会影响驾驶&#xff0c;玩家需要小心驾驶。确保货物安全发送到指…