【c语言】关于+1的各种情况

// 关于+1的各种情况

#include <stdio.h>

//默认对齐数为4
// 结构体大小为16
struct BBB
{
	long A1;
	char A2;
	char A3;
	long A4;
	long A5;
};

int main()
{
	struct BBB *p;
	p = (struct BBB *)0x100000;
	printf("%x\n", p + 0x1);//p是结构体指针,加1加了一个结构体大小,即0x100010
	printf("%x\n",(unsigned long) p + 0x1);// p是无符号长整型,加1即加1,即0x100001
	printf("%x\n", (unsigned long *)p + 0x1);// p是无符号长整型指针,加1即加一个指针大小4,即0x100004
	printf("%x\n",(char *)p + 0x1);// p是字符指针,加1即加字符指针大小1,即0x100001
	return 0;
}

<img src="http://img.blog.csdn.net/20150508212801140?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

时间: 2024-11-07 03:01:39

【c语言】关于+1的各种情况的相关文章

Swift 1.1语言函数参数的特殊情况本地参数名外部参数名

Swift 1.1语言函数参数的特殊情况本地参数名外部参数名 7.4  函数参数的特殊情况 声明定义有参函数时,为函数的每一个参数都定义了参数名称.根据参数名定义的形式不同,函数参数包括本地参数和外部参数名两种本文选自swift入门很简单. 7.4.1  本地参数名 本地参数名就是定义函数名时,在参数列表中所写的参数名,它只可以在函数主体内使用.如以下的一个代码片段,它定义了一个函数名为fun的函数,在此函数的参数列表中定义的就是本地参数名文选自swift入门很简单. func fun(star

有关多语言对WebSocket的支持情况和WebSocket和Socket的区别

多语言对WebSocket的支持 WebSocket是应用层层协议,传输层采用TCP协议,但是在建立连接前需要特殊的HTPP请求进行连接 实际上,许多语言.框架和服务器都提供了 WebSocket 支持,例如: 基于 C 的 libwebsocket.org 基于 Node.js 的 Socket.io 基于 Python 的 ws4py 基于 C++ 的 WebSocket++ Apache 对 WebSocket 的支持: Apache Module mod_proxy_wstunnel N

jquery.pagination结合jquery.tmpl封装前台分页--纯js实现与后端语言无关--适合所有前台分页情况

1.实现效果 2.逻辑说明,通过ajax请求从后获取所有数据,返回对象数据,在DOM加载完成是调用此方法完成数据装载和分页组件初始化,下面是使用DEMO说明,依赖js库稍后附上. <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javasc

Android 应用内多语言切换

p.p1 { margin: 0.0px 0.0px 12.0px 0.0px; line-height: 18.0px; font: 12.0px ".PingFang SC"; color: #000000 } p.p3 { margin: 0.0px 0.0px 13.9px 0.0px; line-height: 18.0px; font: 16.8px "PT Sans"; color: #000000 } p.p4 { margin: 0.0px 0.0

D语言与C语言的互相调用

很多语言都可以实现与C语言的互相调用,但我觉得D语言做的更好些,D与C的兼容是二进制兼容,不是在源码上的兼容,也就是说编译手的二进制文件是可以互相链接的.废话不多说,直接上例子 一.在D语言中调用C函数 首先是准备一个C函数 // foo.c #include <stdio.h> int test() {     printf("message from c\n");     return 123; // 随便返回一个值 } $ gcc -c foo.c 生成 foo.o

C语言中的指针与数组的关联1

在C语言中,指针是一种类型,存放的是地址,例如char*p,这里p存放的是字符型数据的地址,int*p,p存放的是整形数据的地址,我们可以通过解运用*来获取该地址所指向的内容.而数组则是一种数据类型的集合,如int arr[]={1,2,3,4,5,6,7,8,9,10};这里声明与定义了一个整形数组,而char arr[]="hello world";则是声明与定义了一个字符类型的数组,这个数组内存放的是一个字符串. C语言规定,在大多数情况下数组名其实质就是数组元素的首地址,所以我

C语言高级宏技巧

特殊符号#.## (1)# When you put a # before an argument in a preprocessor  macro, the preprocessor turns that argument into a character array.  在一个宏中的参数前面使用一个#,预处理器会把这个参数转换为一个字符数组 简化理解:#是“字符串化”的意思,出现在宏定义中的#是把跟在后面的参数转换成一个字符串 #define ERROR_LOG(module) fprint

怎样学好C语言,一个成功人士的心得!

今天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了全部的数字化信息,不论是一段程序,一封email,一部电影都是用一连串的1和0进行编码的:是他们发现了我们能够利用一个预先编写好的程序控制机器,并使之完毕我们期望它完毕的动作.建议大家在心里默念三遍他们的名字,以示敬仰.当然,假设让你们带着如今的知识回到他们的那个时代,那么就没有什么图灵奖了.C语言程序设计是我们的专业基础课,可是C语言本身却是一个非常强大的工具,它是到

C语言学习之路(1)

学习C语言后我以为我就可以永久的告别单引号了,哎学习还不到一周就碰到了C语言中用单引号的情况,着实一惊. for(i=0;* (p+i)!='\0';i++) * (q+i)=* (p+i); * (q+i)='\0' 刚开始我用的是双引号 for(i=0;* (p+i)!="\0";i++) * (q+i)=* (p+i); * (q+i)="\0" 程序一运行,呵,蹦出个段错误,天哪,我学习C语言还不到一周就让我碰到了段错误,我这是造的什么孽啊,后来左思右想(看

c语言的宏的使用方法(转自他人)

C语言宏定义技巧 周四, 2008年 10月 09日 14:10 高级管理员 C/C++编程 - C语言基础   1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植. typedef  unsigned char      boolean;     /* Boolean value type. */typedef  unsigned