c指针、数组(计算大小)
来源:互联网 发布:乐乎pt 编辑:程序博客网 时间:2024/05/28 15:53
摘自《C语言深度剖析》
1、先将地址 0x12ff7c 强制转换,告诉编译器这个地址上将存储一个 int 类型的数据;然后通过钥匙“ *”向这块内存写入一个数据。
*(int *)0x12ff7c = 0x100;
2、指针和数组不一样的
3、&a指的是数组首元素的地址
a指整个数组的首地址 main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
}
结果:
*(a+1) = 2;
*(ptr-1) = 5;
4、数组指针和指针数组
A), int *p1[10];
指针数组:首先它是一个数组,数组的元素都是指针,数组多少个字节由数组本身决定。它是“储存指针的数组”的简称。
B), int (*p2)[10];
数组指针:首先它是一个指针,它指向一个数组。在 32 位系统下永远是占 4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。
4.1、 a是整个数组的首地址
char a[5] = {'A', 'B', 'C', 'D'};char (*p3)[3] = a;
5、算大小
假设首地址为0x100000
int a[4] = {1,2,3,4};
&a+1 指的是,整个数组的大小加1,0x100000+4*sizeof(int)
a+1 指的是,数组首元素首地址加1,0x100000+sizeof(int)
6、算大小
struct Test{ int Num; char *pcName; short sDate; char cha[2]; short sBa[4];}*p;
假设 p 的值为 0x100000。 如下表表达式的值分别为多少?
p + 0x1 = 0x___ ?
(unsigned long)p + 0x1 = 0x___?
(unsigned int*)p + 0x1 = 0x___?
一个指针变量与一个整数相加减,到底该怎么解析呢?
指针变量与一个整数相加减并不是用指针变量里的地址直接加减这个整数。这个整数的单位不是byte 而是元素的个数。所以:
p + 0x1 的值为 0x100000+sizof( Test) *0x1。至于此结构体的大小为 20byte,前面的章节已经详细讲解过。所以 p +0x1 的值为: 0x100014。
(unsigned long)p + 0x1 的值呢?这里涉及到强制转换,将指针变量 p 保存的值强制转换成无符号的长整型数。任何数值一旦被强制转换,其类型就改变了。所以这个表达式其实就是一个无符号的长整型数加上另一个整数。所以其值为: 0x100001。
(unsigned int*)p + 0x1 的值呢?这里的 p 被强制转换成一个指向无符号整型的指针。所以其值为: 0x100000+sizof( unsigned int) *0x1,等于 0x100004。
- c指针、数组(计算大小)
- 指针组合(如指针数组)的区分及其结构体内存大小的计算
- 指针数组和数组指针(C)
- 指针数组和数组指针(C)
- 指针数组和数组指针(C)
- c++数组大小计算
- 数组 指针 内存 布局 大小端 汇编 c语言
- c语言,指针和数组大小之间的关系
- C++,利用指针对数组元素进行大小排序
- C语言的那些坑(数组做参数计算大小问题)
- C语言基础 使用sizeof计算数组的大小
- 算法 - 有两个相同大小数组均已按升序排列好,编程计算这两个数组的中位数(C++)
- C语言(指针变量的大小)
- C语言中的指针(指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针)
- C语言计算数组的元素和(帮助理解指针)
- C程序设计语言--指针与数组(二) 指针数组 数组指针 函数指针 指针函数
- C的试验田-指向数组的指针练习,并对数组内的字母大小转化
- 【C/C++】指针数组
- Node.js学习随笔(1)
- Kali2.0安装后配置
- JAVA中的集合与泛型整理总结
- 炮弹游戏1
- 最长上升子序列nlogn及n^2算法
- c指针、数组(计算大小)
- 单例模式
- 【Linux 基础篇】之 yum安装LAMP环境与管理
- SQL 左连 右连 内连和外连
- VPN搭建笔记
- 正确使用C++引用做返回值和参数
- CodeForces 630 O. Arrow(计算几何)
- Builer(生成器模式)
- 一个程序员查询妹子考研成绩的故事