【C语言】关于数组名遇到的问题

2024-03-12 11:58
文章标签 语言 问题 遇到 数组名

本文主要是介绍【C语言】关于数组名遇到的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在写程序的时候遇到这么一个问题:用结构体创建了一个数据组。然后想用结构体作为参数去运行函数:

 test((creat*)data);
​test((creat*)&data);

上面两种方式都可以运行。结果正确。

其中,data为数组名;creat为结构体的句柄;test为函数名。

数组名data和&data的内存地址相同。数组名相当于一个指针,指向第一个元素。也就是代表数组的首地址。

测试后发现。data+1代表的是data[1]的首地址;而&data+1代表的是整个数组结束后的地址。区别如下图:

测试程序如下:

#include <stdio.h>typedef void(*x)(void);typedef struct{unsigned int   	a;char* 	s; x    xx;
}creat;void swap(void){printf("**********************************\n");}void test(creat* pp){pp[0].s="hello!";pp[1].s="byebye!";
}
void test1(creat* pp){pp->s="wowowowow!";
}
int main()
{unsigned int b;creat data[3],tl;data[0].s="hi!";data[1].s="bye!";data[0].a=1;data[1].a=2;tl.a = 3;tl.s ="wow!";printf("data[0]=%d \n",data[0].a);printf("data[0]=%s \n",data[0].s);printf("data[1]=%d \n",data[1].a);printf("data[1]=%s \n",data[1].s);printf("tl.a=%d \n",tl.a);printf("tl.s=%s \n",tl.s);printf("=====================\n");test((creat*)data);test1(&tl);printf("data[0]=%d \n",data[0].a);printf("data[0]=%s \n",data[0].s);printf("data[0]=%d \n",data[1].a);printf("data[0]=%s \n",data[1].s);printf("tl.a=%d \n",tl.a);printf("tl.s=%s \n",tl.s);data[0].xx=swap;data[0].xx();printf("b=%d \n",&data);printf("b=%d \n",data+1);printf("b=%d \n",&data[1]);printf("b=%d \n",&data+1);return 0;
}

 

这篇关于【C语言】关于数组名遇到的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno

Java使用MethodHandle来替代反射,提高性能问题

《Java使用MethodHandle来替代反射,提高性能问题》:本文主要介绍Java使用MethodHandle来替代反射,提高性能问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录一、认识MethodHandle1、简介2、使用方式3、与反射的区别二、示例1、基本使用2、(重要)

电脑蓝牙连不上怎么办? 5 招教你轻松修复Mac蓝牙连接问题的技巧

《电脑蓝牙连不上怎么办?5招教你轻松修复Mac蓝牙连接问题的技巧》蓝牙连接问题是一些Mac用户经常遇到的常见问题之一,在本文章中,我们将提供一些有用的提示和技巧,帮助您解决可能出现的蓝牙连接问... 蓝牙作为一种流行的无线技术,已经成为我们连接各种设备的重要工具。在 MAC 上,你可以根据自己的需求,轻松地

Java 中的跨域问题解决方法

《Java中的跨域问题解决方法》跨域问题本质上是浏览器的一种安全机制,与Java本身无关,但Java后端开发者需要理解其来源以便正确解决,下面给大家介绍Java中的跨域问题解决方法,感兴趣的朋友一起... 目录1、Java 中跨域问题的来源1.1. 浏览器同源策略(Same-Origin Policy)1.

如何清理MySQL中的binlog问题

《如何清理MySQL中的binlog问题》:本文主要介绍清理MySQL中的binlog问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目http://www.chinasem.cn录清理mysql中的binlog1.查看binlog过期时间2. 修改binlog过期

qtcreater配置opencv遇到的坑及实践记录

《qtcreater配置opencv遇到的坑及实践记录》我配置opencv不管是按照网上的教程还是deepseek发现都有些问题,下面是我的配置方法以及实践成功的心得,感兴趣的朋友跟随小编一起看看吧... 目录电脑环境下载环境变量配置qmake加入外部库测试配置我配置opencv不管是按照网上的教程还是de

如何解决yum无法安装epel-release的问题

《如何解决yum无法安装epel-release的问题》:本文主要介绍如何解决yum无法安装epel-release的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录yum无法安装epel-release尝试了第一种方法第二种方法(我就是用这种方法解决的)总结yum

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

Go 语言中的 Struct Tag 的用法详解

《Go语言中的StructTag的用法详解》在Go语言中,结构体字段标签(StructTag)是一种用于给字段添加元信息(metadata)的机制,常用于序列化(如JSON、XML)、ORM映... 目录一、结构体标签的基本语法二、json:"token"的具体含义三、常见的标签格式变体四、使用示例五、使用