数组和指针再次来袭

原创 2016年06月02日 10:45:19

1,数组和指针的定义于声明:

定义:只能出现一次,用来确定对象的类型和大小,并为其分配空间。

声明:可以出现多次,描述对象的类型,用于指定其他地方定义的对象,不为对象分配空间。

所以说extern char a[]与extern char a[10]等价,因为这是声明,不分配空间。

看一个关于数组指针的例子:

例1:

#include<stdio.h>
int main()
{
	char a[5] = { 'A', 'B', 'C', 'D' };
	char(*p3)[4] = &a;//这样的赋值不合理,数组a有5个元素,而p3是一个包含4个元素的数组指针。
	char(*p4)[5] = a;//p4用来存放数组地址,a代表数组首元素的地址,所以类型不匹配
	return 0;
}

如果将&a强制类型转换为(char (*)[4])&a后就可以赋值给char (*p)[4]了,p4+1相当于加了4个字节,而不是5,因为p4的大小为4。

例2:

#include<stdio.h>
#include<stdlib.h>
struct Test
{
	int Num;
	char *pcName;
	short sDate;
	char cha[2];
	short sBa[4];
}*p;
int main()
{
	struct Test test;//假设sizeof(struct Test)=20
	p = &test;
	printf("%x\n", p);
	printf("%x\n", p + 0x1);
	printf("%x\n", (unsigned long)p + 0x1);
	printf("%x\n", (unsigned int*)p + 0x1);
	system("pause");
	return 0;
}

wKiom1Zj8eWymj5NAAA0f8CUAM4486.png

结果分析:p的地址为1ef7f4,p里面存放的是结构体的地址,所以p+0x1就要加一个结构体的大小20,转换为16进制,结果就是1ef808。将p转化为无符号长整型,加1就是直接加十进制1,结果就是1ef7f5。将p转换为整型指针,占四个字节,加1就相当于加1*sizeof(int *),结果就是1ef7f8。

例3:vs2013中小端存储:

int main()
{
	int a[4] = { 1, 2, 3, 4 };
	int *ptr1 = (int *)(&a + 1);
	int *ptr2 = (int *)((int)a + 1);
	printf("%x,%x", ptr1[-1], *ptr2);
	system("pause");
	return 0;
}

wKiom1ZkBfbwLMXjAAAng-b5WQ8844.png

wKioL1ZkCADDVAe2AAAc-CVM4Tw298.png








本文出自 “Stand out or Get out” 博客,请务必保留此出处http://jiazhenzhen.blog.51cto.com/10781724/1720090

版权声明:

相关文章推荐

AppCan6月免费技术培训16城市34场再次来袭

时间匆匆,短短一个月的移动开发技术普及显然不能满足大家对移动开发的强烈需求。   6月,AppCan免费技术培训16城市34场再来袭。   其中大连、合肥、长沙、南宁增加项目培训。城市多、...

干货再次来袭!Linux小白最佳实践:《超容易的Linux系统管理入门书》(连载八)用命令实现批量添加用户

Windows添加用户需要至少5个界面,而Linux一条命令就搞定了,这是不是高效人士办公第一法则呢。本文不给你一堆参数和选项,不让你见识教条主义,只给你最实用的代码。

华展云4月第二期免费会刊再次疯狂来袭!

免费!会刊!免费会刊!来啦!来啦!来啦!终于等到你。。。【本次免费会刊更新,有以下华粉儿大力支持】 中国国际养老展( 手机18501226242  2018中国养老产业第一展 ) 广州新能源汽车及...

Android 并发二三事之 IntentService Handler 机制再次来袭

Android 并发第六篇。本篇介绍 IntentService 。IntentService 本身是一个 Service 。 当我们执行耗时操作时,例如下载一个文件,一般我们都会把这个操作放在 S...

借助U-boot进行一些内存地址的再次研究(二维数组及指针数组)

转自:http://www.latelee.org/porting-uboot/150-u-boot-porting-memory-again.html #include #includ...

u-boot移植随笔:一些内存地址的再次研究(二维数组及指针数组)

u-boot移植随笔:一些内存地址的再次研究(二维数组及指针数组)

网易云捕1.5版本已经上线,重磅功能来袭

云捕1.5版本已上线。          (未升级SDK的开发者,请您更新SDK最新版本号:Android 3.6.15,iOS 1.1.5,新版本在保证稳定性基础上增加了新功能)    ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)