sizeof

线性表

安稳与你 提交于 2020-01-22 01:47:06
一、线性表的结构体定义 #define MaxSize 100 typedef struct{ int data[maxSize]; int length; }Sqlist;//顺序表结构体定义 typedef struct LNode{ int data; struct LNode *next;//指向后继结点的指针 }LNode;//单链表结点定义 typedef struct DLNode{ int data; struct DLNode *proir;//前驱结点 struct DLNode *next;//后继结点 }DLDode;//双链表结点定义 PS:结点是内存中由用户分配的存储空间,只有一个地址来表达它的存在,没有显示的名称,因此我们会在分配链表结点空间的时候,同时定义一个指针,来存储这片空间的地址。(这个地址通常的讲叫指针指向结点,并且常用这个指针的名称来作为结点的名称) 例如: LNode *A = (LNode*)malloc(sizeof(LNode)); 即: Lnode x; // 声明一个Lnode类型的变量x Lnode *y; // 声明一个指向Lnode类型变量的指针变量y y=&x; // 正确。将y指向x。 printf( "sizeof Lnode is %d", sizeof(Lnode) ); // 显示Lnode类型变量的大小

「网络流 24 题」魔术球

假如想象 提交于 2020-01-22 01:29:01
比较有意思的题 题意:给你n个柱子,问你可以在上面放多少个编号连续且每根柱子上相邻的编号为平方数的球 洗澡时候想的,根据平方数这个关系建边,然后枚举多少个柱子,然后再在图上跑最小路径覆盖,若路径条数大于柱子数,那么珠子数-1就是答案 我写的有点....t了,但不想改 #include<bits/stdc++.h> using namespace std; int n,tot=-1,h[3005],ans=0,hou[3005]; struct node{ int from,next,to,rest,full; int last; }e[1000005]; bool judge[60005]; void add(int x,int y,int z){ tot++; e[tot].next=h[x]; h[x]=tot; e[tot].from=x; e[tot].to=y; e[tot].rest=z; e[tot].full=z; } int dis[3005],g[3005],flow[3005]; bool vis[3005]; int bfs(int s,int t){ queue<int>q; dis[s]=0; q.push(s);vis[s]=true; while(!q.empty()){ int u=q.front();vis[u]=false;q.pop();

矩阵乘法题目汇总

烈酒焚心 提交于 2020-01-21 08:44:16
矩阵,学过线性代数的都知道,矩阵满足结合律,但不满足交换律 关于矩阵,有很多经典的应用,可以看下大牛的博客 http://www.matrix67.com/blog/archives/276 下面的题目中,最常见的一种应用就是利用矩阵求递推式,可以通过构造矩阵求幂 在这方面,最常见的就是在斐波那契数列方面,可以看下这个博客,超牛的 http://www.cnblogs.com/Knuth/archive/2009/09/04/1559951.html 很容易构造出关于斐波那契的矩阵,累乘求幂,就可以求出斐波那契的对应的项 直接开始题目吧 hdu1575 Tr A 题目,直接矩阵求幂,再求该矩阵的迹,注意,利用矩阵乘法满足结合律,我看可以利用二进制优化求幂次数。比如:A^7=A^4 * A^2 * A^1 具体的结合代码很容易理解的 View Code #include<iostream>#include<algorithm>#include<string>using namespace std;const int MOD = 9973;const int N = 11;int ret[N][N],init[N][N],temp[N][N];int n;void init_(){ for(int i=0;i<n;i++) for(int j=0;j<n;j++) ret[i][j]=

C语言内存对齐和结构补齐

我只是一个虾纸丫 提交于 2020-01-21 00:15:25
首先我们先看看下面的C语言的结构体: [cpp] view plain copy typedef struct MemAlign { int a; char b[3]; int c; }MemAlign; 以上这个结构体占用内存多少空间呢?也许你会说,这个简单,计算每个类型的大小,将它们相加就行了,以32为平台为例,int类型占4字节,char占用1字节,所以:4 + 3 + 4 = 11,那么这个结构体一共占用11字节空间。好吧,那么我们就用实践来证明是否正确,我们用sizeof运算符来求出这个结构体占用内存空间大小,sizeof(MemAlign),出乎意料的是,结果居然为12?看来我们错了?当然不是,而是这个结构体被优化了,这个优化有个另外一个名字叫“对齐”,那么这个对齐到底做了什么样的优化呢,听我慢慢解释,再解释之前我们先看一个图,图如下: 相信学过汇编的朋友都很熟悉这张图,这张图就是CPU与内存如何进行数据交换的模型,其中,左边蓝色的方框是CPU,右边绿色的方框是内存,内存上面的0~3是内存地址。这里我们这张图是以32位CPU作为代表,我们都知道,32位CPU是以双字(DWORD)为单位进行数据传输的,也正因为这点,造成了另外一个问题,那么这个问题是什么呢?这个问题就是,既然32位CPU以双字进行数据传输,那么,如果我们的数据只有8位或16位数据的时候

unsigned int vs. size_t

爷,独闯天下 提交于 2020-01-20 13:35:37
我注意到现代 C 和C ++代码似乎在任何地方使用 size_t 而不是 int / unsigned int - 从C字符串函数的参数到STL。 我很好奇这个原因及其带来的好处。 #1楼 size_t 类型是无符号整数类型,它是 sizeof 运算符(和 offsetof 运算符)的结果,因此保证它足够大以包含系统可以处理的最大对象的大小(例如,静态数组8GB)。 size_t 类型可能大于,等于或小于 unsigned int ,并且您的编译器可能会对其进行假设以进行优化。 您可以在C99标准中找到更准确的信息,第7.17节,其草案可在因特网上以 pdf 格式或在C11标准第7.19节中获得,也可作为 pdf草案获得 。 #2楼 类型size_t必须足够大,以存储任何可能对象的大小。 Unsigned int不必满足该条件。 例如,在64位系统中int和unsigned int可能是32位宽,但size_t必须足够大以存储大于4G的数字 #3楼 经典C(由Brian Kernighan和Dennis Ritchie在C编程语言中描述的C的早期方言,Prentice-Hall,1978)没有提供 size_t 。 C标准委员会引入 size_t 来消除可移植性问题 在embedded.com上详细解释(有一个很好的例子) #4楼 size_t类型是sizeof运算符返回的类型。

实现Arp报文发送和接收

落爺英雄遲暮 提交于 2020-01-20 12:49:07
继上次实现了 Ping 之后,尝试进入更底层的网络接口层实现局域网的 ARP 报文收发 ARP 协议概述 ARP(Address Resolution Protocol) 地址解析协议是用来通过网络层地址(IP地址)去寻找数据链路层地址(MAC地址)的网络传输协议. 在以太网(Ethernet)协议中规定, 同一局域网中 的一台主机要和另一台主机进行直接通信,必须要知道目标主机的 MAC 地址。而在 TCP/IP 协议中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用 IP 协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。这就是 ARP 协议要做的事情。所谓地址解析(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。另外,当发送主机和目的主机 不在同一个局域网中时 ,即便知道对方的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为委托ARP或ARP代理(ARP Proxy)。—— 地址解析协议 报文格式 以太网首部:

pthread 的几个结构体

牧云@^-^@ 提交于 2020-01-20 04:07:07
http://blog.csdn.net/yangzhongxuan/article/details/7397139 /* Copyright (C) 2002,2003,2004,2005,2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the

wenbao与动态规划

守給你的承諾、 提交于 2020-01-20 04:05:30
终于要开始了。。。。。。。。 万能的dp ------------------------------------------------------------------------------------------------------------------------------------------------------------------ 动规入门级题目 数字三角形 不多说 http://lx.lanqiao.cn/problem.page?gpid=T312 1 #include <iostream> 2 using namespace std; 3 int a[105][105]; 4 int main(){ 5 int n; 6 scanf("%d", &n); 7 for(int i = 0; i < n; ++i){ 8 for(int j = 0; j <= i; ++j){ 9 scanf("%d", &a[i][j]); 10 } 11 } 12 for(int i = n-2; i >= 0; --i){ 13 for(int j = 0; j <= i; ++j){ 14 a[i][j] = a[i][j] + max(a[i+1][j], a[i+1][j+1]); 15 //cout<<i<<" "<<j<<" "<<a[i][j]

指针和数组计算大小(sizeof()和strlen()的对比)

醉酒当歌 提交于 2020-01-20 01:34:14
/**--------------------------------------------------------------- * @brief 指针和数组变量sizeof()和strlen()的比较 * *---------------------------------------------------------------*/ int point_array_init ( ) { int * PointOne = "123456" ; char * PointTwo = "123456" ; char * PointThree = "123456\0" ; int ArrayOne [ 6 ] = { 1 , 2 , 3 , 4 , 5 , 6 } ; char ArrayTwo [ 6 ] = { 1 , 2 , 3 , 4 , 5 , 6 } ; char ArrayThree [ 7 ] = { 1 , 2 , 3 , 4 , 5 , 6 , '\0' } ; printf ( "\n\t|-------------------------------------------------------------------------\n" ) ; printf ( "\t| int *Point: | " ) ; printf ( "sizeof(Point

基本函数、关键字用法

☆樱花仙子☆ 提交于 2020-01-19 12:55:22
1、const 用法: const float PI = 3.1415926 ; // PI为只读变量,使用时必须初始化; const float PI ( 3.1415926 ) ; //初始化时可使用; 2、sizeof 用法: int x ; sizeof ( short ) ; sizeof x ; 3、位运算: a = a & 0xfe ; //将char型变量a的最低位 置 0; c = a & 0xff ; //有char c;int a;取出a的低字节; a = a | 0xff ; //将int型变量a的低字节 置 1; 01111010 ^ 00001111 ; //将特定位翻转; 4、类型转换操作符<类型说明符>(表达式): const_cast ; dynamic_cast ; reinterpret_cast ; static_cast ; 来源: CSDN 作者: Kpsle 链接: https://blog.csdn.net/qq_44884204/article/details/104033750