Demo.cpp文件

#include <iostream>
#include <stdio.h>
#include <iomanip>
#include <ctime>#include "headFile.h"
#include "Object.h"using namespace std;int main(int argc,char *argv[])
{
#ifdef X1 // int i=7,j=8;printf("i==%d,&i==%p\n",i,&i);cout<<"j=="<<j<<" &j=="<<&j<<endl;
#endif
#ifdef X2 // int i=7,j=8;int *ip=&i;int *jp=&j;cout<<"Address: "<<ip<<" contains: "<<*ip<<endl;cout<<"Adderss: "<<jp<<" contains: "<<*jp<<endl;*ip=9;*jp=10;cout<<"Now Address: "<<ip<<" contains: "<<*ip<<endl;cout<<"Now Adderss: "<<jp<<" contains: "<<*jp<<endl;#endif
#ifdef X3 // int i=7;int *ip=&i;int **ipp=&ip;cout<<"Address: "<<ip<<" constains: "<<*ip<<endl;cout<<"Address: "<<ipp<<" contains: "<<*ipp<<endl;cout<<"***ipp== "<<**ipp<<endl;
#endif
#ifdef X4 // float a[]={1.0,2.0,3.0};cout<<"sizeof(float)=="<<sizeof(float)<<endl;float *p=&a[0];cout<<"p=="<<p<<" *p=="<<*p<<endl;++p;cout<<"p=="<<p<<" *p=="<<*p<<endl;ptrdiff_t diff=(p+1)-p;cout<<"diff=="<<diff<<endl;diff=(char*)(p+1)-(char*)p;cout<<"diff=="<<diff<<endl;
#endif
#ifdef X5 // int i=7;char *cp=(char*)&i;cout<<"The integer at "<<&i<<"=="<<i<<endl;for(int n=0;n<sizeof(i);++n)cout<<"The byte at"<<(void*)(cp+n)<<"=="<<int(*(cp+n))<<endl;
#endif
#ifdef X6 // unsigned short date,year=92,mon=8,day=2;date= (year<<9) | (mon<<5) | day;cout<<hex<<date<<endl;
#endif
#ifdef X7 // struct Date{unsigned day:5;unsigned mon:4;unsigned year:7;};unsigned short date,year=92,mon=8,day=2;Date *dp=(Date*)&date;dp->mon=mon;dp->day=day;dp->year=year;cout<<hex<<date<<endl;cout<<dec<<"year:"<<int(dp->year)<<" ";cout<<dec<<"mon:"<<int(dp->mon)<<" ";cout<<dec<<"day:"<<int(dp->day)<<endl;
#endif
#ifdef X8 // int i=7,j=8;swap(&i,&j);cout<<"i=="<<i<<" j=="<<j<<endl;
#endif
#ifdef X9 //char source[]="1234";char tar[]="********";memcpy(tar,source,strlen(source));cout<<source<<" "<<" "<<tar<<endl;
#endif
#ifdef X10 // char c='a';short i=100;long n=10000L;double pi=3.141529;// 40 *9 21 D9 F4 D3 7C 13char s[]="hello";char az[]="abcdefghijklmnopqrstuvwxyz";// 61~7Achar AZ[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";// 41~5Ainspect(&c,sizeof(c));        cout<<endl;inspect(&i,sizeof(i));     cout<<endl;inspect(&n,sizeof(n));     cout<<endl;inspect(&pi,sizeof(pi));   cout<<endl;inspect(s,sizeof(s));      cout<<endl;inspect(az,sizeof(az));        cout<<endl;inspect(AZ,sizeof(AZ));        cout<<endl;
#endif
#ifdef X11 // int a[]={1,2,3,4,5};int *p=a;cout<<"sizeof(a)=="<<sizeof(a)<<endl;cout<<"sizeof(p)=="<<sizeof(p)<<endl;cout<<"p=="<<p<<" &a[0]=="<<&a[0]<<endl;cout<<"*p=="<<*p<<" a[0]=="<<a[0]<<endl;p=a+2;cout<<"p=="<<p<<" &a[2]=="<<&a[2]<<endl;cout<<"**p=="<<*p<<" a[2]=="<<a[2]<<endl;
#endif
#ifdef X12 // int a[]={1,2,3,4,5};size_t n=sizeof(a)/sizeof(a[0]);for(int i=0;i<n;++i)cout<<a[i]<<' ';cout<<endl;for(i=0;i<n;++i)cout<<i[a]<<' ';cout<<endl;int* p=a;while(p<a+n)cout<<*p++<<' ';cout<<endl;p=a;for(i=0;i<n;++i)cout<<p[i]<<' ';cout<<endl;for(i=0;i<n;++i)cout<<*(a+i)<<' ';cout<<endl;p=a+n-1;while(p>=a)cout<<*p--<<' ';cout<<endl;p=a+n-1;for(i=0;i<n;++i)cout<<p[-i]<<' ';cout<<endl;
#endif
#ifdef X13 // 匿名数组char a[]="hello";char *p=a;cout<<"a=="<<&a<<" sizeof(a)=="<<sizeof(a)<<endl;cout<<"p=="<<(void*)p<<" sizeof(p)=="<<sizeof(p)<<endl;cout<<"sizeof\"hello\"=="<<sizeof("hello")<<endl;cout<<"address of \"hello\"=="<<(void*)"hello"<<endl;cout<<"address of \"hello\"=="<<(void*)"hello"<<endl;
#endif
#ifdef X14 //char c[]="0123456789";for(int i=0;i<10;i+=2)cout<<c[i]<<' ';cout<<endl;for(i=0;i<10;i+=2)cout<<"0123456789"[i]<<' '; // 经典cout<<endl;
#endif
#ifdef X15 // int a[]={10,15,4,1,3,-4};int *p=&a[2];int *q=&a[2];cout<<*(p+1)<<endl;cout<<p[-1]<<endl;cout<<p-a<<endl;cout<<a[*p++]<<endl; // *p++ = 4 = a[2]cout<<a[*++q]<<endl; // *++q = 1 = a[3]cout<<*(a+a[2])<<endl;
#endif
#ifdef X16 // int a[]={0,1,2,3,4};size_t n=sizeof(a)/sizeof(a[0]);cout<<"a=="<<a<<endl;cout<<"sizeof(a)=="<<sizeof(a)<<endl;func(a,n);for(int i=0;i<n;++i)cout<<a[i]<<' ';cout<<endl;
#endif
#ifdef X17 // Lincoln实验室 Chet Small 提供的这个聪明的例子char s[]="desolate",*p=s;cout<<*p++<<endl;cout<<*(p++)<<endl;cout<<(*p)++<<endl;cout<<*++p<<endl;cout<<++*p<<endl;cout<<++(*p)<<endl;//  StrCmp(s,?)==0     ?中 应该是什么 才能满足此表达式
#endif
#ifdef X18 // 指向字符串的指针数组 有个别名叫 “粗糙数组” char* strings[]={"now","is","the","time"};size_t n=sizeof(strings)/sizeof(strings[0]);for(int i=0;i<n;++i)cout<<"string"<<i<<"==\""<<strings[i]<<"\"\tsize=="<<sizeof(strings[i])<<"\tlength=="<<strlen(strings[i])<<endl;
#endif
#ifdef X19 // char strings[][5]={"now","is","the","time"};size_t n=sizeof(strings)/sizeof(strings[0]);for(int i=0;i<n;++i)cout<<"strings["<<i<<"]==\""<<strings[i]<<"\"\tsize=="<<sizeof(strings[i])<<"\tlength=="<<strlen(strings[i])<<endl;
#endif
#ifdef X20 // int a[][4]={{0,1,2,3},{4,5,6,7},{8,9,0,1}};int (*p)[4]=a;size_t nrows=sizeof(a)/sizeof(a[0]);size_t ncols=sizeof(a[0])/sizeof(a[0][0]);cout<<"sizeof(*p)=="<<sizeof(*p)<<endl;for(int i=0;i<nrows;++i){for(int j=0;j<ncols;++j)cout<<p[i][j]<<' ';cout<<endl;}
#endif
#ifdef X21 // int a[][3][4]= {{{0,1,2,3},{4,5,6,7},{8,9,0,1}},{{2,3,4,5},{6,7,8,9},{0,1,2,3}}};int (*p)[3][4]=a;size_t ntables=sizeof(a)/sizeof(a[0]);size_t nrows=sizeof(a[0])/sizeof(a[0][0]);size_t ncols=sizeof(a[0][0])/sizeof(a[0][0][0]);cout<<"sizeof(*p)=="<<sizeof(*p)<<endl;cout<<"sizeof(a[0][0])=="<<sizeof(a[0][0])<<endl;for(int i=0;i<ntables;++i){for(int j=0;j<nrows;++j){for(int k=0;k<ncols;++k)cout<<p[i][j][k]<<' ';cout<<endl;}cout<<endl;}
#endif
#ifdef X22 // int (*pFunc)(const char *, ...)=printf;pFunc("函数指针的应用\n");
#endif
#ifdef X23 // qsort(argv+1,argc-1,sizeof(argv[0]),comp);while(--argc)cout<<*++argv<<endl;
#endif
#ifdef X24 //if(argc>=2&&argc<=4)for(int i=0;i<argc;i++)cout<<argv[i]<<endl;else cout<<"输入有误"<<endl;#endif
#ifdef X25 // int i;for (i=0; i < argc; i++)printf("Argument %d is %s.\n", i, argv[i]);
#endif
#ifdef X26 // extern void retrieve(void);extern void insert(void);extern void update(void);extern int show_menu(int c);void (*farray[])(void)={retrieve,insert,update}; // 数组元素是函数名字for(int choice=0;choice<show_menu(5);++choice){farray[choice%3]();   // choice%3 的可能值为 0、1、2 正好可以把farray数组下标覆盖全}
#endif
#ifdef X27 // class C{public:void f(){ cout<<"C::f()\n";}void g(){ cout<<"C::g()\n";}};C cobject1;void (C::*pCF1)()=&C::f;// 未声明直接使用(cobject1.*pCF1)();pCF1=&C::g;(cobject1.*pCF1)();cout<<"上下两种风格的类成员函数指针"<<endl;// 上下两种风格void (C::*pCF2)();// 声明类的成员函数指针C cobject2;pCF2=&C::f;(cobject2.*pCF2)();pCF2=&C::g;(cobject2.*pCF2)();
#endif
#ifdef X28 // int show_menu(int);srand((int)time(NULL));Object O;for(;;){int choice=show_menu(rand()%100);if(0<=choice && choice <3)O.process(choice-1);else if(choice==4)break;elsecout<<"No numbers contains"<<endl;}
#endif
#ifdef X29 //
#endif
#ifdef X3 //
#endifreturn 0;
}

headFile.h

#ifndef HEADFILE_H
#define HEADFILE_H
#include <iostream>
#include <cstdio>
#include <iomanip>
using namespace std;
#define X28void swap(int* xp,int* yp);
void* memcpy(void* target,const void* source,size_t n);
void inspect(const void* ptr,size_t nbytes);
void func(int b[],size_t n);
int comp(const void* p1,const void* p2);#endif

headFile.cpp

#include "headFile.h"void swap(int* xp,int* yp)
{int temp=*xp;*xp=*yp;*yp=temp;
}void* memcpy(void* target,const void* source,size_t n)
{char * targetp=(char*)target;const char* sourcep=(const char*)source;while(n--)*targetp++=*sourcep++;return target;
}void inspect(const void* ptr,size_t nbytes)
{const unsigned char* p=(const unsigned char*)ptr;// 强制转换为const 类型的变量(只为读取不为改写)cout.setf(ios::hex,ios::basefield);for(int i=0;i<nbytes;++i)cout<<"byte"<<setw(2)<<setfill(' ')<<i<<":  "<<setw(2)<<setfill('*')<<int(p[i])<<endl;
}void func(int b[],size_t n)
{cout<<"\n *** Entering function func() *** \n";cout<<"b=="<<b<<endl;cout<<"sizeof(b)=="<<sizeof(b)<<endl;for(int i=0;i<n;++i)cout<<b[i]<<' ';b[2]=99;cout<<"\n *** Leaveing function() ***\n\n";
}int comp(const void* p1,const void* p2)
{const char *ps1=*(const char**)p1;const char *ps2=*(char**)p2;return strcmp(ps1,ps2);
}void retrieve(void)    {   printf("1 retrieve\n");   }
void insert(void)   {   printf("2 insert\n");     }
void update(void)   {   printf("3 update\n");     }
int show_menu(int c){int i=c; return i;}

Object.h

#ifndef OBJECT_H
#define OBJECT_H
class Object
{
public:void retrieve(void)  {   printf(" Object::retrieve\n");    }void insert(void)  {   printf(" Object::insert\n");  }void update(void)  {   printf(" Object::update\n");  }void process(int choice);
private:typedef void (Object::*Omf)();static Omf farray[3];
};Object::Omf Object::farray[3]=   {   &Object::retrieve,&Object::insert,&Object::update};void Object::process(int choice)
{if(0<= choice && choice <=2)(this->*farray[choice])();
}
#endif

C/C++指针 数组相关推荐

  1. C++ 笔记(27)— 指针变量、数组和指针、指针数组、数组指针、指针常量与常量指针

    1. 什么是指针变量? 指针变量是专门有一个变量来存放指针. int main(int argc, char *argv[]) {int a = 10;int *p = &a; //通过取地址 ...

  2. 关于C语言中的数组指针、指针数组以及二级指针

    概念解释 数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针:在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道.数组指针指向的是数组中的一个具体元素,而不是整个数组,所 ...

  3. 【C语言】数组指针与指针数组的区分与应用

    这里以一道C语言题--输出矩阵两个对角线上的数(二维数组)为例 7-57 输出矩阵两个对角线上的数(二维数组) (6 分) 编写程序,将数据输入一个n * n二维数组中,输出矩阵两个对角线上的数.假设 ...

  4. C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)

    1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...

  5. Go 学习笔记(13)— 指针定义、指针特点、空指针、指针数组、指向指针的指针、指针作为函数入参

    1. 复合数据类型 Go 语言基本的复合数据类型有指针.数组.切片.字典.通道.结构和接口等.格式如下: * pointerType // 指针类型, [n]elementType // 数组类型, ...

  6. inline函数返回值_C++知识补充-指针,const,函数指针,指针数组,运算符重载

    嵌入式Linux:C++ 面试准备珍藏版本​zhuanlan.zhihu.com 明月照我心:123道c++笔试题汇总(含答案)​zhuanlan.zhihu.com 阿贵:常见C++笔试面试题整理​ ...

  7. C指针9:指针数组(即数组中的每个元素都是指针)

    前边已经讲过数组指针,强调的是指针,意思就是该指针指向的是数组(数组里边的元素一般为普通数据). 指针数组,强调的是数组,意思就是该数组里边的每个元素都是指针类型.即如果一个数组中的所有元素保存的都是 ...

  8. 手写堆模板(指针数组)

    文章目录 使用说明 1.插入式建堆 2.直接在数组基础上调整排序建堆 使用说明 本文的堆以小根堆为例,给出模板 使用时将ElementType 修改为对应的数据类型就好 1.插入式建堆 建一个空堆,将 ...

  9. C语言指针数组与数组指针的区别

    C语言指针数组与数组指针的区别 首先,顾名思义 数组指针是一个指针,是指向一个数组的指针,如 int (a*)[5]:这就是一个指向含有5个元素的数组的指针 指针数组是一个数组,它包含的元素全是指针变 ...

  10. 【 C 】指针数组案例分析(const的作用)

    说在前面 看了好声音,听了谢霆锋对学员说的那句话,压力之下快速成长,突然感慨万千,自己难道不就是这样吗?这个时候,千千万万的企业到学校招聘,有的人很容易拿到offer,有的人却忧愁不已,还有一年的时间 ...

最新文章

  1. 如何对比两个Jar包
  2. 脑电信号滤波方式汇总
  3. swift3.0:NSURLSession的使用
  4. EventBus初解
  5. how to export many stock data from Wind terminal
  6. java自动随机字符_java随机字符生成工具
  7. idea 编写javafx_用JavaFX编写图块引擎
  8. 【渝粤教育】广东开放大学 物业服务营销管理 形成性考核 (59)
  9. cocos2dx CCLayerColor和CCLayerColor
  10. Vasya and Multisets CodeForces - 1051C 模拟|分类讨论
  11. 解析软件系统稳定性的三大秘密
  12. NPM酷库:cheerio,服务端jQuery接口实现
  13. C++类中的static数据成员,static成员函数
  14. 001.XE3添加TPerlRegEx
  15. 让Apache Shiro保护你的应用[转]
  16. 数据包的分类和调度-Linux TC的另一种解释
  17. 391 卡信乐卡盟程序
  18. CISCO 5510 ASDM的实战总结
  19. 告别公告_我告别freeCodeCamp
  20. python线性回归预测波士顿房价_预测波士顿的房价|简单的线性回归入门

热门文章

  1. python爬虫面试自我介绍范文_走过路过不容错过,Python爬虫面试总结
  2. 更改主机名后mysql无法启动_主机名变更导致MySql启动失败
  3. python装饰器模式带参数_python 装饰器模式 我的理解
  4. devtools 无法加载 sourcemap_用 babel-plugin 实现按需加载
  5. PSIM软件学习---02 原件模型
  6. MyBatis-Plus分页查询——Page
  7. Redis——Java连接Redis
  8. 查看指定进程io状态的iotop命令
  9. QT4.7和VS2008 顺利安装必读 (最新版)
  10. SpringBoot 手写过滤器amp;加载第三方过滤器