#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. python 判断变量有没有定义

    ? 1 2 'varname' in locals().keys() 'varname' in  dir()

  2. loadrunner基础学习笔记七-面向目标场景

    部署应用程序之前,要执行验收测试以确保系统能够承担预期的实际工作量. 可以为想要生成的每秒点击次数,每秒事务数或事务响应时间设置目标 loadrunner将使用面向目标的场景自动生成所需的目标,当应用 ...

  3. docker --swarm启动2375端口监听

    首先要下载swarm docker pull swarm 然后停掉docker服务: service docker stop 然后启动deamon: sudo dockerd -H tcp://0.0 ...

  4. BZOJ1022[SHOI2008]小约翰的游戏——anti-SG(反尼姆博弈)

    题目描述 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取,我们规定取到 ...

  5. The Shortest Statement CodeForces - 1051F(待测试)

    #include <iostream> #include <cstdio> #include <sstream> #include <cstring> ...

  6. 网络流Dinic模板

    #include <iostream> #include <cstdio> #include <cstring> #include <queue> #d ...

  7. BZOJ 4555: [Tjoi2016&Heoi2016]求和 (NTT + 第二类斯特林数)

    题意 给你一个数 \(n\) 求这样一个函数的值 : \[\displaystyle f(n)=\sum_{i=0}^{n}\sum_{j=0}^{i} \begin{Bmatrix} i \\ j ...

  8. 【BZOJ2484】[SDOI2011]打地鼠(暴力)

    [BZOJ2484][SDOI2011]打地鼠(暴力) 题面 BZOJ 洛谷 题解 看到数据范围这题就应该是一个暴力题了. 先考虑假如我们知道了锤子的大小\(R*C\),那么显然只需要从左上角开始从左 ...

  9. MHN蜜罐系统建设

    0x00  MHN蜜罐介绍 MHN(Modern Honey Network):开源蜜罐,简化蜜罐的部署,同时便于收集和统计蜜罐的数据.用ThreatStream来部署,数据存储在MOngoDB中,安 ...

  10. JS循环语句!

    <1> for(1.初始值(初始值只有一次):2.判断条件:4.状态改变){ 3.执行语句: //如果判断条件为true,则进入死循环:不设执行语句浏览器会未响应: } <2> ...