#include<iostream>
#include<cmath> //C++
//#include<math.h> //C #include<ctime>//C++
#include<time.h>//C
#include<cstdlib>//C++
#include<stdlib.h>//C #include<cstring>
using namespace std; #define PI 3.141592653 //<cmath>
void math(){ //double cos(double);
//该函数返回弧度角(double 型)的余弦。 //double sin(double);
//该函数返回弧度角(double 型)的正弦。 //double tan(double);
//该函数返回弧度角(double 型)的正切。 //double log(double);
//该函数返回参数的自然对数。 //double pow(double, double);
//假设第一个参数为 x,第二个参数为 y,则该函数返回 x 的 y 次方。 //double hypot(double, double);
//该函数返回两个参数的平方总和的平方根,也就是说,参数为一个直角三角形的两个直角边,函数会返回斜边的长度。 //double sqrt(double);
//该函数返回参数的平方根。 //int abs(int);
//该函数返回整数的绝对值。 //double fabs(double);
//该函数返回任意一个十进制数的绝对值。 //double floor(double);
//该函数返回一个小于或等于传入参数的最大整数。即 向下取整 double num = *PI; cout<<"cos(2*PI):"<<cos(*PI)<<endl;
cout<<"sin(2*PI):"<<sin(*PI)<<endl;
cout<<"tan(2*PI):"<<tan(*PI)<<endl;
cout<<"log(2*PI):"<<log(*PI)<<endl;
cout<<"pow(2,3):"<<pow(,)<<endl;
cout<<"hypot(3,4):"<<hypot(,)<<endl;
cout<<"sqrt(2*PI):"<<sqrt(*PI)<<endl;
cout<<"abs(2*PI):"<<abs(*PI)<<endl;
cout<<"fabs(2*PI):"<<fabs(*PI)<<endl;
cout<<"floor(2*PI):"<<floor(*PI)<<endl;//向下取整
}
/*
cos(2*PI):1
sin(2*PI):-1.17959e-009
tan(2*PI):-1.17959e-009
log(2*PI):1.83788
pow(2,3):8
hypot(3,4):5
sqrt(2*PI):2.50663
abs(2*PI):6.28319
fabs(2*PI):6.28319
floor(2*PI):6
*/ //time(arg):<ctime>/<time.h>
//srand():<cstdlib>/<stdlib.h>
void randNum(){
srand((unsigned)time(NULL));
for(int i=;i<;i++){
cout<<rand()<<" ";
}
}
//test1:106 12839 8211 12377 1817 27409 18868 1179 11303 22190
//test2:576 20513 24747 4086 12555 3034 8308 5635 29676 21604 //array pattern:type name[size1][size2]...[sizeN];
void array(){
//二维数组
int dimension2[][] = {,,,};
for(int i=;i<;i++){
for(int j=;j<;j++){
cout<<dimension2[i][j]<<" ";
}
cout<<endl;
}
//三维数组
int magic[][][];
for(int i=;i<;i++){
for(int j=;j<;j++){
for(int k=;k<;k++){
magic[i][j][k] = i+j+k+;
cout<<"magic["<<i<<"]["<<j<<"]["<<k<<"]:"<<(i+j+k+)<<" ";
}
cout<<endl;
}
cout<<endl;
}
}
/*
1 2
3 4
magic[0][0][0]:3 magic[0][0][1]:4 magic[0][0][2]:5
magic[0][1][0]:4 magic[0][1][1]:5 magic[0][1][2]:6
magic[0][2][0]:5 magic[0][2][1]:6 magic[0][2][2]:7 magic[1][0][0]:4 magic[1][0][1]:5 magic[1][0][2]:6
magic[1][1][0]:5 magic[1][1][1]:6 magic[1][1][2]:7
magic[1][2][0]:6 magic[1][2][1]:7 magic[1][2][2]:8 magic[2][0][0]:5 magic[2][0][1]:6 magic[2][0][2]:7
magic[2][1][0]:6 magic[2][1][1]:7 magic[2][1][2]:8
magic[2][2][0]:7 magic[2][2][1]:8 magic[2][2][2]:9
*/ //向数组的指针
void array2(){
double *p;//指向数组的指针
double balance[] = {10009.0,,57.56,4546.7,464.45,,,,};
//balance指向balance[0]的地址;
//balance = &balance[0]; p = balance;
cout<<*p<<endl;//
cout<<(*p+)<<endl;//
cout<<*(p+)<<endl;//57.56
cout<<*(p+)<<endl;//3.65854e-317[error]
} //传递数组给指针
void array3(){
//way 1
/*形式参数是一个指针:
void myFunction(int *param){
...
}
*/ //way2
/*形式参数是一个已定义大小的数组:
void myFunction(int param[10]){
...
}
*/ //way3
/*形式参数是一个未定义大小的数组:
void myFunction(int param[]){
...
}
*/
} //从函数返回数组
// 要生成和返回随机数的函数
int * getRandom( ){
static int r[]; // 设置种子
srand( (unsigned)time( NULL ) );
for(int i = ; i < ; ++i){
r[i] = rand();
cout << r[i] << endl;
} return r;
}
void array4(){
/*如果您想要从函数返回一个一维数组,您必须声明一个返回指针的函数,如下:
另外,C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。
int * myFunction(){
...
}
*/ // 一个指向整数的指针
int *p; p = getRandom();
for ( int i = ; i < ; i++ ){
cout << "*(p + " << i << ") : ";
cout << *(p + i) << endl;
}
}
/*
7591
6650
25660
16948
17093
16274
9181
9305
8828
21059
*(p + 0) : 7591
*(p + 1) : 6650
*(p + 2) : 25660
*(p + 3) : 16948
*(p + 4) : 17093
*(p + 5) : 16274
*(p + 6) : 9181
*(p + 7) : 9305
*(p + 8) : 8828
*(p + 9) : 21059
*/ //字符串<cstring>/<string.h>
void string_(){
// strcpy(s1, s2);
// 复制字符串 s2 到字符串 s1。 // strcat(s1, s2);
// 连接字符串 s2 到字符串 s1 的末尾。 // strlen(s1);
// 返回字符串 s1 的长度。 // strcmp(s1, s2);
// 如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。 // strchr(s1, ch);
// 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。 // strstr(s1, s2);
//返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。 // char *str1 = "678676";
// cout<<str1;//678676
// char *str2 = "hello ";
// strcpy(str1,str2);//error
// cout<<strlen(str2)<<endl;// char str_a[] = {'','','','','',''};
char str_b[] = {'h','e','l','l','o'};
strcpy(str_a,str_b);
cout<<str_a<<str_b;//hellohello } //指针
void pointer(){
int var = ;//普通变量
int *p;//指针变量:指针变量是指存放地址的变量[百度百科]
//指针变量
//value:引用值/变量的地址
//address:指针变量的地址 p = &var;//指针变量赋普通变量的地址值 //空指针
//在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。
//赋为 NULL 值的指针被称为空指针。
//在大多数的操作系统上,程序不允许访问地址为 0 的内存,因为该内存是操作系统保留的。
//然而,内存地址 0 有特别重要的意义,它表明该指针不指向一个可访问的内存位置。
//但按照惯例,如果指针包含空值(零值),则【假定它不指向任何东西】。
double *ip = NULL;
// cout<<ip<<" "<<(*ip)<<endl;//error } //指针数组
//优先级:()>[]>*
/*
一个指向字符的指针数组来存储一个字符串列表
*/
#define MAX 3
void pointerArray(){
//数组指针(也称行指针)
//定义 int (*p)[n];
//()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。 //如要将二维数组赋给一指针,应这样赋值:
int a[][];
int (*p)[]; //该语句是定义一个数组指针,指向含4个元素的一维数组。
p = a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][] //所以数组指针也称指向一维数组的指针,亦称行指针。 for(int i = ;i < ;i++){
for(int j=;j < ;j++){
a[i][j] = i+j-;
}
}
p = a;
for(int i=;i<;i++){
cout<<*(p[i]+)<<" "<<p[i]<<endl;//0x70fda0
}
//////////////////////////////////////////////////////////
int var[MAX] = {, , };
int *ptr[MAX];//指针数组 (优先级:[]大于*(间接访问)) for (int i = ; i < MAX; i++){
ptr[i] = &var[i]; // 赋值为整数的地址
}
for(int i = ; i < MAX; i++){
cout << "Value of var[" << i << "] = ";
cout << *ptr[i] << endl;
}
///////////////////////////////////////////////////////// //优先级:()>[]>*
int *pointer=NULL;//(普通)指针变量,仅能指向单个地址
int *poniter2[];//指针数组变量,指向三个地址
int (*poniter3)[];//数组指针变量【行指针】,一个指向行长度为4的数组的指针变量
}
/*
-9 0x70fd60
-8 0x70fd70
-7 0x70fd80
Value of var[0] = 10
Value of var[1] = 100
Value of var[2] = 200
*/ //多级指针(指向指针的指针)
void pointerToPointer(){
int var = ;
int *p = &var;
int **pp = &p;//指向指针的指针 cout<<(&var)<<" "<<p<<" "<<*(pp)<<endl; //0x70fe0c 0x70fe0c 0x70fe0c
cout<<(&var)<<" "<<(&p)<<" "<<pp<<" "<<&(pp)<<endl; //0x70fe0c 0x70fe00 0x70fe00 0x70fdf8
cout<<var<<" "<<*p<<" "<<*(*pp)<<endl; //100 100 100
} int main(){
// math(); // randNum(); // array();
// array2();
// array3();//传递数组给指针
// array4();//从函数返回数组 // string_(); // pointerArray();//指针
pointerToPointer();//多级指针
system("pause");
return ;
}

[C++]数组与指针(纯代码-复习用)的更多相关文章

  1. C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组

    #include<stdio.h> #include<stdlib.h> #include<windows.h> /* 举列子说明什么是函数指针 */ //以一个加 ...

  2. ios手势复习值之换图片-转场动画(纯代码)

    目标:实现通过手势进行图片的切换   通过左扫右扫 来实现(纯代码) 添加三个属性 1uiImageView 用来显示图片的view 2 index 用来表示图片的索引 3 ISLeft 判断是不是向 ...

  3. 猫学习IOS(三)UI纯代码UI——图片浏览器

    猫分享.必须精品 看看效果 主要实现相似看新闻的一个界面,不用拖拽,纯代码手工写. 首先分析app能够非常easy知道他这里有两个UILabel一个UIImageView还有两个UIButton 定义 ...

  4. C语言数组与指针总结

    寒假要开始猛刷<剑指offer>,先回顾一下C语言基础做个热身. 指针 相信大家对下面的代码不陌生: ; int *p; p=&i; 这是最简单的指针应用,也是最基本的用法.再来熟 ...

  5. AJ学IOS(03)UI之纯代码实现UI——图片查看器

    AJ分享,必须精品 先看效果 主要实现类似看新闻的一个界面,不用拖拽,纯代码手工写. 首先分析app可以很容易知道他这里有两个UILabel一个UIImageView还有两个UIButton 定义UI ...

  6. 把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)

    督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1.我们知道,将一个数组赋给另一个数组,就是将一个数组的元素逐个赋值给另一数组的对应元素,相应的,将一个vector 赋给另 ...

  7. C语言核心之数组和指针详解

    指针 相信大家对下面的代码不陌生: int i=2; int *p; p=&i;这是最简单的指针应用,也是最基本的用法.再来熟悉一下什么是指针:首先指针是一个变量,它保存的并不是平常的数据,而 ...

  8. 《征服 C 指针》摘录3:数组 与 指针

    一.数组 和 指针 的微妙关系 数组 是指将固定个数.相同类型的变量排列起来的对象. 正如之前说明的那样,给指针加 N,指针前进“当前指针指向的变量类型的长度 X N”. 因此,给指向数组的某个元素的 ...

  9. 【C语言学习】《C Primer Plus》第10章 数组和指针

    学习总结 1.数组初始化方式: int a[]={1,2,3} int a[SIZE]={1,2,3} //SIZE是宏定义,数组初始化个数不能大于SIZE,否则报错:当个数小 //SIZE,自动补0 ...

随机推荐

  1. chart.js & canvas

    chart.js & canvas https://www.chartjs.org/samples/latest/ https://www.chartjs.org/samples/latest ...

  2. html 佈局

    html常見佈局方式有以下幾種: 1.使用div的html 利用div可以為html實現多列佈局. 2.使用html5的網站佈局, 利用html新增的header.footer.nav.section ...

  3. luogu1856

    P1856 [USACO5.5]矩形周长Picture 题目背景 墙上贴着许多形状相同的海报.照片.它们的边都是水平和垂直的.每个矩形图片可能部分或全部的覆盖了其他图片.所有矩形合并后的边长称为周长. ...

  4. MT【210】四点共圆+角平分线

    (2018全国联赛解答最后一题)在平面直角坐标系$xOy$中,设$AB$是抛物线$y^2=4x$的过点$F(1,0)$的弦,$\Delta{AOB}$的外接圆交抛物线于点$P$(不同于点$A,O,B$ ...

  5. MT【53】对数平均做数列放缩

    [从最简单的做起]--波利亚 请看下面三道循序渐进不断加细的题. 评:随着右边的不断加细,解决问题的方法也越来越"高端".当然最佳值$ln2$我们可以用相对 容易的方法来证明: $ ...

  6. 【POI每日题解 #8】DYN-Dynamite

    你问蒟蒻为什么一天写两篇每日题解? 难道每日坚果你不能一天吃两包吗? 题目链接 哇…这道题第一反应就是二分答案[太明显了 枚举答案 就那个“关键节点到这些点中距离的最小值的最大值”[蒟蒻读了好几遍…… ...

  7. [luogu3979][bzoj3083]遥远的国度

    [luogu传送门] [bzoj传送门] 题目描述 zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度.当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了zcww ...

  8. 打开SharePoint 2013 web application显示iis 欢迎页面

    当我打开SP web application时,页面显示如下: 查看event log,发现有一些8315-8317之类的error,发现把request management service停掉后, ...

  9. .net连接ORACLE数据库

    这段时间维护客户的一个系统,该系统使用的是ORACLE数据库,之前开发的时候用的都是MSSQL,并没有使用过ORACLE.这两种数据库虽然都是关系型数据库,但是具体的操作大有不同,这里作下记录. 连接 ...

  10. Jenkins中使用Azure Powershell连接Service Fabric报错not recognized的原因与解决办法

    一.使用背景 在涉及Azure service Fabric的自动化应用场景中,依赖于Service Fabric的Azure Powershell cmdlets,我们可以使用Jenkins能实现c ...