数组名的两个例外

//数组名的理解:
//数组名是数组首元素的地址
//但是有2个例外:
//1. sizeof(数组名),数组名表示整个数组,计算的是整个数组的大小,单位是字节
//2. &数组名,数组名表示整个数组,取出的是数组的地址
int main()
{
	int a[] = { 1,2,3,4 };

	printf("%zd\n", sizeof(a));//16
	printf("%zd\n", sizeof(a + 0));//数组名a并没有单独放在sizeof内部,也没有&,
	//所以a就是数组首元素的地址,是地址大小就是 4/8个字节
	//a+0 ===== &a[0]

	printf("%zd\n", sizeof(*a));//a就是数组首元素的地址,a==&a[0]
	//*a 其实就是第一个元素,也就是a[0],大小就是4个字节
	
	printf("%zd\n", sizeof(a + 1));//a就是数组首元素的地址(&a[0] --int*), a+1--> &a[1]
	//a+1就是第二个元素的地址

	printf("%zd\n", sizeof(a[1]));//计算第2个元素的大小,单位是字节 - 4

	printf("%zd\n", sizeof(&a));//
	//&a - 取出的是数组的地址,但是数组的地址也是地址,是地址大小就是4 / 8 个字节
	//
	printf("%zd\n", sizeof(*&a));//16
	//printf("%zd\n", sizeof(a));//16
	//&a - int (*p)[4] = &a;
	//*p 访问一个数组的大小
	//p+1 跳过一个数组的大小

	printf("%zd\n", sizeof(&a + 1));//&a+1是跳过整个数组后的地址,是地址大小就是4/8个字节

	printf("%zd\n", sizeof(&a[0]));//首元素的地址,4/8
	printf("%zd\n", sizeof(&a[0] + 1));//第二个元素的地址

	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个面向局域网、互联网的即时聊天工具,它专门针对学校及企业内部的网络通讯而开发的。 Messenger除了具有一般聊天工具都有的基础功能以外,还有自定义表情符等高级功能,使用简单,服务器无需特别数据库配置。 本软件很适合作为学校、企业内部局域网的通讯工具。 用户登录基本原理 1.用户登录,客户端根据用户填写的IP向服务器发送连接请求,若IP正确且服务器工作正常。服务器会在Winsock数组(Servicesocket(i))中建立一个连接,同时在自定义类型数组UserInfo(u)中初始化一个索引值与该用户使用的Servicesocket索引(Index属性)值相同的元素,并将其所有值设置为N/A(执行LogIn函数)。然后,服务器调用 New_User 、Login_user 判断用户提交资料与服务器存储的用户资料是否相符(密码是否正确、是否新用户、服务器状况是否允许用户登录等)。若条件符合,服务器向客户端发送登录成功信号(.LoginGood Svc2)并将用户资料写进属于该用户的UserInfo类中。否则向客户端发送登录失败信号(.LoginBad [失败原因代号]),断开连接。 2.用户收到服务器的登录成功信号后,向服务器提交获取好友列表请求(.getbuddys)。服务器收到该请求后调用 GetBuddysFromDB 、Get_User_buddies 完成对该用户好友的数据搜索,并将该用户的所有好友的称、状态合并为一条命令发送给指定的用户。客户端接收到命令后立刻进行解析,完成对好友的添加及状态更新(利用Wordfunc 模块中的函数)。 3.一个用户登录成功后,服务器会向所有连接在其上的用户(无论该用户处于何种状态)发送一个用户上线状态通知。其它用户接受该通知后根据情况自动决定是否进行更新。 发送/接收信息基本原理 1.当用户点击“发送”按钮或通过其他方式命令客户端发送信息时,客户端将Richtextbox 中的信息代码(TextRTF属性)的开头附加上起始标志(.msg )、在其末尾添加接收用户的称和结束标志( ||),然后向服务器发送该信息。 2.服务器接收到客户端发出的消息后,根据信息头标志(.msg)判断这是一则聊天信息,同时根据信息结束标志( ||)判断该信息是否完整(若不完整,写入缓冲字符串数组)、获取信息的接收用户。判断完毕后,找到对应用户使用的Servicesocket,向该用户发送信息(若该用户不在线,信息将写入临时文件储存,待该用户上线再发送) ZX Messenger 除文件传送和二人模式外,所有通讯均采用这种模式。 3.信息被转发到目标用户后,将再一次进行完整性判断(因为Winsock发送数据包大小受网络情况限制)并对数据进行连接。然后,使用 Word 函数取出有效信息并显示。 Messenger 使用 Microsoft Visual Basic 6.0 开发,(除去各附件)本软件大体分为两个部分——客户端和服务器端(是典型的C/S架构)。其客户端和服务器端依靠Winsock进行通讯(使用TCP/IP 协议),服务器通过建立Winsock控件数组实现多客户端同时连接的支持。Messenger 的消息走向主要采用 客户端发送——服务器中转——客户端接收的模式(个别功能例外)。 ZX Messenger 适用于 Windows 95/98[注]/Me/2000/XP/.Net Server 2003 [注]:本软件只适用于安装了Microsoft Office或其他带有 Microsoft Visual Basic 6.0 运行库 的 Windows 95/98操作系统,对于没有安装 Microsoft Visual Basic 6.0 运行库的WINDOWS 95/98 ,本软件会无法运行,对于这种情况,请下载 Microsoft Visual Basic 6.0 运行库 并安装。Win98 以后的操作系统不存在此问题。
根据引用\[2\]中的解法,可以将一个数组分为两个数组,使得这两个数组各自的和最接近。具体的解法如下: ```javascript var list = \[1, 2, 3, 4, 5\]; // 输入的数组 var arr1 = \[\]; // 第一个数组 var arr2 = \[\]; // 第二个数组 var sum1 = 0; // 第一个数组的和 var sum2 = 0; // 第二个数组的和 list.sort(function(a, b) { // 将数组按照从大到小的顺序排序 return b - a; }); for (var i = 0; i < list.length; i++) { if (sum1 <= sum2) { // 将当前元素加入第一个数组 arr1.push(list\[i\]); sum1 += list\[i\]; } else { // 将当前元素加入第二个数组 arr2.push(list\[i\]); sum2 += list\[i\]; } } console.log(arr1); // 输出第一个数组 console.log(arr2); // 输出第二个数组 ``` 对于输入的数组 `\[1, 2, 3, 4, 5\]`,根据上述解法,可以将其分为两个数组 `\[1, 2, 5\]` 和 `\[3, 4\]`,使得这两个数组各自的和最接近。 #### 引用[.reference_title] - *1* [javascript将一个数组分成两个数组,并使各数组和只差最小](https://blog.csdn.net/qq_38360823/article/details/117467799)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [面试题:用Python将一个数组分割成两个数组,使两个数组各自的和的差值最小...](https://blog.csdn.net/weixin_33749242/article/details/92407302)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值