Linux下C测试多个*两个const
来源:互联网 发布:sqlserver 回滚数据 编辑:程序博客网 时间:2024/06/16 16:44
在linux下的gcc测试当类型中有多个*时,
最多两个const不会出现警告并且必须格式TYPE *const*const p=&a;
警告 const TYPE**p; TYPEconst**const p=&a;const TYPE **cosnt p=&a;TYPE *const*const*const*const*const..p;
且由后面两个警告得TYPEconst**const p=&a;和const TYPE **cosnt p=&a;等效。
只要不出错,警告出来的一般可以运行(但是是破坏性的)。
推测TYPE const*const*const*const*const*const p=&a;由const依次得到对应类型
TYPE、TYPE*、TYPE**、TYPE***、TYPE****、TYPE*****,显然对应的这些被限定为不可赋值.当然一些const可能不会有。
因此我觉得TYPEconst*const p=&a;写成这样会好理解。
--------------------------以下全部在Linux下,使用的是gcc
正确(两个**两个const)
//编译 gcc const.c//运行 ./a.out#include<stdio.h>#include<string.h>typedef int TYPE;int main(){ TYPE A11=453; TYPE A1=321; TYPE *A2=&A1; TYPE *A22=&A11; TYPE *const*const p=&A2; printf("memory**:%p memory*:%p data:%d\n",p,*p,**p); A2=&A11; printf("memory**:%p memory*:%p data:%d\n",p,*p,**p); **p=A1; printf("memory**:%p memory*:%p data:%d\n",p,*p,**p); return 0;}
[ pcdtest]$ ./a.out
memory**:0x7fffa4714d90 memory*:0x7fffa4714d98 data:321
memory**:0x7fffa4714d90 memory*:0x7fffa4714d9c data:453
memory**:0x7fffa4714d90 memory*:0x7fffa4714d9c data:321
正确(三个星两个const)
//编译 gcc const.c//运行 ./a.out#include<stdio.h>#include<string.h>typedef int TYPE;int main(){ TYPE A11=453; TYPE A1=321; TYPE *A2=&A1; TYPE **A3=&A2; TYPE **const*const p=&A3; printf("memory***:%p memory**:%p memory:*:%p data:%d\n",p,*p,**p,***p); A2=&A11; printf("memory***:%p memory**:%p memory:*:%p data:%d\n",p,*p,**p,***p); ***p=A1; printf("memory***:%p memory**:%p memory:*:%p data:%d\n",p,*p,**p,***p); return 0;}
**********************************以下两个警告,可以看到TYPE const**const p=&A2;和const TYPE**const p=&A2;等效均会造成警告。
const_.c: In function ‘main’:
const_.c:12: 警告:从不兼容的指针类型初始化
[ pcdtest]$ ./a.out
memory**:0x7fff0097c300 memory*:0x7fff0097c308 data:321
memory**:0x7fff0097c300 memory*:0x7fff0097c30c data:453
memory**:0x7fff0097c300 memory*:0x7fff0097c308 data:321
//编译 gcc const.c//运行 ./a.out#include<stdio.h>#include<string.h>typedef int TYPE;int main(){ TYPE A11=453; TYPE A1=321; TYPE *A2=&A1; TYPE *A22=&A11; TYPE const* *const p=&A2; printf("memory**:%p memory*:%p data:%d\n",p,*p,**p); A2=&A11; printf("memory**:%p memory*:%p data:%d\n",p,*p,**p); *p=&A1; printf("memory**:%p memory*:%p data:%d\n",p,*p,**p); return 0;}
//编译 gcc const.c//运行 ./a.out#include<stdio.h>#include<string.h>typedef int TYPE;int main(){ TYPE A11=453; TYPE A1=321; TYPE *A2=&A1; TYPE *A22=&A11; const TYPE **const p=&A2; printf("memory**:%p memory*:%p data:%d\n",p,*p,**p); A2=&A11; printf("memory**:%p memory*:%p data:%d\n",p,*p,**p); *p=&A1; printf("memory**:%p memory*:%p data:%d\n",p,*p,**p); return 0;}
*************************************
最后给个字符串的
警告:
const_.c: In function ‘main’:
const_.c:10: 警告:初始化丢弃了指针目标类型的限定
//编译 gcc const.c//运行 ./a.out#include<stdio.h>#include<string.h>typedef char* TYPE;int main(){ TYPE ca2="_before_me"; const TYPE ca="me"; TYPE *const p=&ca; TYPE caf="afterme"; printf("memory:%p data:%s\n",&ca2,ca2); printf("memory:%p data:%s\n",p,*p); printf("memory:%p data:%s\n",&caf,caf); //破坏性使用 *p="hello_word"; printf("memory:%p data:%s\n",&ca2,ca2); printf("memory:%p data:%s\n",p,*p); printf("memory:%p data:%s\n",&caf,caf); printf("memory:%p data:%s\n",&ca,ca); return 0;}
打印结果:
memory:0x7fff719439d0 data:_before_me
memory:0x7fff719439c8 data:me
memory:0x7fff719439c0 data:afterme
memory:0x7fff719439d0 data:_before_me
memory:0x7fff719439c8 data:hello_word
memory:0x7fff719439c0 data:afterme
memory:0x7fff719439c8 data:hello_word
- Linux下C测试多个*两个const
- Linux下C测试const
- linux下测试多个信号
- Linux下配置两个或多个Tomcat启动
- Linux下配置两个或多个Tomcat启动
- linux系统下安装两个或多个tomcat
- Linux下配置两个或多个Tomcat启动
- linux系统下安装两个或多个tomcat
- Linux下配置两个或多个Tomcat启动
- linux系统下安装两个或多个tomcat
- Linux下配置两个或多个Tomcat启动
- Linux下配置两个或多个Tomcat启动
- linux系统下安装两个或多个tomcat
- linux系统下安装两个或多个tomcat
- Linux下配置两个或多个Tomcat启动
- linux系统下安装两个或多个tomcat
- linux系统下安装两个或多个tomcat
- 两个 linux 下的 ipc 命令 - [c & c++]
- Java的按值传递
- unity ugui实现整页滑动
- 【linux】--task_struct
- 关于系统调用fork()
- ajax实现文件上传
- Linux下C测试多个*两个const
- 《机器学习实战》学习笔记 --chapter2 K-近邻算法
- STL vector等容器erase操作
- 线程安全与可重入函数
- [杂题] BZOJ 4437 [Cerc2015]Looping Labyrinth
- promise的封装
- chromedriver与chrome各版本及下载地址
- MySQL二进制日志定时备份管理
- unit10系统日志