[C++]数组与指针(纯代码-复习用)
- #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++]数组与指针(纯代码-复习用)的更多相关文章
- C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组
#include<stdio.h> #include<stdlib.h> #include<windows.h> /* 举列子说明什么是函数指针 */ //以一个加 ...
- ios手势复习值之换图片-转场动画(纯代码)
目标:实现通过手势进行图片的切换 通过左扫右扫 来实现(纯代码) 添加三个属性 1uiImageView 用来显示图片的view 2 index 用来表示图片的索引 3 ISLeft 判断是不是向 ...
- 猫学习IOS(三)UI纯代码UI——图片浏览器
猫分享.必须精品 看看效果 主要实现相似看新闻的一个界面,不用拖拽,纯代码手工写. 首先分析app能够非常easy知道他这里有两个UILabel一个UIImageView还有两个UIButton 定义 ...
- C语言数组与指针总结
寒假要开始猛刷<剑指offer>,先回顾一下C语言基础做个热身. 指针 相信大家对下面的代码不陌生: ; int *p; p=&i; 这是最简单的指针应用,也是最基本的用法.再来熟 ...
- AJ学IOS(03)UI之纯代码实现UI——图片查看器
AJ分享,必须精品 先看效果 主要实现类似看新闻的一个界面,不用拖拽,纯代码手工写. 首先分析app可以很容易知道他这里有两个UILabel一个UIImageView还有两个UIButton 定义UI ...
- 把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1.我们知道,将一个数组赋给另一个数组,就是将一个数组的元素逐个赋值给另一数组的对应元素,相应的,将一个vector 赋给另 ...
- C语言核心之数组和指针详解
指针 相信大家对下面的代码不陌生: int i=2; int *p; p=&i;这是最简单的指针应用,也是最基本的用法.再来熟悉一下什么是指针:首先指针是一个变量,它保存的并不是平常的数据,而 ...
- 《征服 C 指针》摘录3:数组 与 指针
一.数组 和 指针 的微妙关系 数组 是指将固定个数.相同类型的变量排列起来的对象. 正如之前说明的那样,给指针加 N,指针前进“当前指针指向的变量类型的长度 X N”. 因此,给指向数组的某个元素的 ...
- 【C语言学习】《C Primer Plus》第10章 数组和指针
学习总结 1.数组初始化方式: int a[]={1,2,3} int a[SIZE]={1,2,3} //SIZE是宏定义,数组初始化个数不能大于SIZE,否则报错:当个数小 //SIZE,自动补0 ...
随机推荐
- ceph 搭建nginx负载3个对象网关
nginx.conf user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid ...
- VMware配置Linux中APPache服务器
[软件] VMware SecureCRT [镜像文件] Centos6.8 APPache软件包 [步骤] 1.将所需文件通过SCRT传入到虚拟机中 2.挂载镜像 2.1 将镜像挂载到mn ...
- 最小费用最大流spfa
#include <iostream> #include <cstring> #include <cstdio> #include <queue> #d ...
- 说说Java 位运算
前言 我们都知道,在计算机世界里,再复杂,再美的程序,到最后都会变成0与1.也就是我们常说的:二进制.二进制相信大家都很熟悉.与现实世界不同的是,在现实世界里,我们通常都是用十进制来表示的,也就是遇十 ...
- 【BZOJ2302】[HAOI2011]Problem C(动态规划)
[BZOJ2302][HAOI2011]Problem C(动态规划) 题面 BZOJ 洛谷 题解 首先如果\(m=0\)即没有特殊限制的话,那么就和这道题目基本上是一样的. 然而这题也有属于这题的性 ...
- 4月1日->-4月15日 2周阶段性计划
4月1日->4月14日 ST表 树状数组 LCA 一周的时间,力求掌握这三个知识点并各刷五道题左右. 树状数组 ST表 LCA 然而:进展总比计划快(......什么鬼) 树状数组刷了5题,ST ...
- MATLAB:图像的移动(move函数)
图像移动涉及到move函数,实现过程如下: close all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clear all; clc; I=imread('lenna.bmp ...
- 中南大学2018年ACM暑期集训前期训练题集(入门题) X: 又一道简单题
简直智障,上一题V题,样例输出里面的“Case:”不要输出,到了这题又是要输出的了 #include<iostream> using namespace std; int num[1000 ...
- logistic regression浅析
最近开始学习机器学习的相关理论知识,准备把自己的整个学习心得整理汇集成博客,一来可以督促自己,二来可以整理思路,对问题有一个更加透彻的理解,三来也可以放在网上和大家分享讨论,促进交流. 由于这次的学习 ...
- 高效的SQLSERVER分页查询
Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询 ...