要处理
来源:互联网 发布:lua 下载网络文件 编辑:程序博客网 时间:2024/05/17 22:24
一、关于指针的思考
指针的基本概念:
int a[100];
int *p;
p=a;
以上代码有一些基本的等价,需要铭记。
p等价于&a[0]等价于a
*p等价于a[0]等价于*a
*(p+1)等价于p[1]等价于a[1]等价于*(a+1)
但是,如果对数组名取址呢?
int a[]={1,2,3};
int *p;
int **q;
p=a;
q=&a;
printf("%x\n",p);
printf("%x\n",q);
这时候会发生错误,
error C2440: '=' : cannot convert from 'int (*)[3]' to 'int **'
printf("sizeof(p)=%d\n",sizeof(p));
printf("sizeof(q)=%d\n",sizeof(q));
printf("sizeof(a)=%d\n",sizeof(a));
printf("%x\n",a);
printf("%x\n",&a);
我们加上这三句,看看三个指针占用的内存大小,发现是
大小分别是4,4,12。那就意味着,&a与&a+1的距离是3个int单位(12 bytes)。
同时可以看到,a与&a的地址是一样的。
所以我们可以知道,虽然对a取&了,但是并不是传统意义上取a值所在的内存地址。
同时我们要清楚,&a的数据类型是 int (*)[3],占用12个bytes。
所以int **q; q=&a会报错。
怎么解决这个问题呢?将q的数据类型声明为int (*q)[3];
或者int *q; q=(int *)&a;
但是如果想用两重指针,是不能实现的。
- 要处理
- 处理
- 处理
- 处理
- Angularjs 处理CheckBox 处理要传输的数据
- 为什么要用exit()进行错误处理?
- 到底要在哪里处理异常
- IOS 处理图片要注意的地方
- 异常处理要注意的地方
- 网络程序为什么要处理SIGPIPE
- 人生要小心处理的事
- QURL中的要写入中文怎么处理
- 到底要在哪里处理异常
- C++为什么要引入异常处理机制
- slab为什么要进行着色处理
- 游戏制作要处理的相关细节
- 肺部小结节要如何处理
- 信号处理中,为什么要引入复数
- 设计模式概览
- delete []m_data
- 初始化列表
- 黑客入门-必学的8个DOS命令
- VMware虚拟机Red Hat图形界面与命令行介面的切换
- 要处理
- linux下killall程序简介
- RabbitMQ 之HelloWorld
- 四种强制转换方式
- 杭电2061
- linux 压缩解压缩命令
- memset()的效率以及源码分析
- Python开发: Django模板语言简单总结
- #ifdef _DEBUG用法小结