1. #include<iostream>
  2. #include<cmath> //C++
  3. //#include<math.h> //C
  4.  
  5. #include<ctime>//C++
  6. #include<time.h>//C
  7. #include<cstdlib>//C++
  8. #include<stdlib.h>//C
  9.  
  10. #include<cstring>
  11. using namespace std;
  12.  
  13. #define PI 3.141592653
  14.  
  15. //<cmath>
  16. void math(){
  17.  
  18. //double cos(double);
  19. //该函数返回弧度角(double 型)的余弦。
  20.  
  21. //double sin(double);
  22. //该函数返回弧度角(double 型)的正弦。
  23.  
  24. //double tan(double);
  25. //该函数返回弧度角(double 型)的正切。
  26.  
  27. //double log(double);
  28. //该函数返回参数的自然对数。
  29.  
  30. //double pow(double, double);
  31. //假设第一个参数为 x,第二个参数为 y,则该函数返回 x 的 y 次方。
  32.  
  33. //double hypot(double, double);
  34. //该函数返回两个参数的平方总和的平方根,也就是说,参数为一个直角三角形的两个直角边,函数会返回斜边的长度。
  35.  
  36. //double sqrt(double);
  37. //该函数返回参数的平方根。
  38.  
  39. //int abs(int);
  40. //该函数返回整数的绝对值。
  41.  
  42. //double fabs(double);
  43. //该函数返回任意一个十进制数的绝对值。
  44.  
  45. //double floor(double);
  46. //该函数返回一个小于或等于传入参数的最大整数。即 向下取整
  47.  
  48. double num = *PI;
  49.  
  50. cout<<"cos(2*PI):"<<cos(*PI)<<endl;
  51. cout<<"sin(2*PI):"<<sin(*PI)<<endl;
  52. cout<<"tan(2*PI):"<<tan(*PI)<<endl;
  53. cout<<"log(2*PI):"<<log(*PI)<<endl;
  54. cout<<"pow(2,3):"<<pow(,)<<endl;
  55. cout<<"hypot(3,4):"<<hypot(,)<<endl;
  56. cout<<"sqrt(2*PI):"<<sqrt(*PI)<<endl;
  57. cout<<"abs(2*PI):"<<abs(*PI)<<endl;
  58. cout<<"fabs(2*PI):"<<fabs(*PI)<<endl;
  59. cout<<"floor(2*PI):"<<floor(*PI)<<endl;//向下取整
  60. }
  61. /*
  62. cos(2*PI):1
  63. sin(2*PI):-1.17959e-009
  64. tan(2*PI):-1.17959e-009
  65. log(2*PI):1.83788
  66. pow(2,3):8
  67. hypot(3,4):5
  68. sqrt(2*PI):2.50663
  69. abs(2*PI):6.28319
  70. fabs(2*PI):6.28319
  71. floor(2*PI):6
  72. */
  73.  
  74. //time(arg):<ctime>/<time.h>
  75. //srand():<cstdlib>/<stdlib.h>
  76. void randNum(){
  77. srand((unsigned)time(NULL));
  78. for(int i=;i<;i++){
  79. cout<<rand()<<" ";
  80. }
  81. }
  82. //test1:106 12839 8211 12377 1817 27409 18868 1179 11303 22190
  83. //test2:576 20513 24747 4086 12555 3034 8308 5635 29676 21604
  84.  
  85. //array pattern:type name[size1][size2]...[sizeN];
  86. void array(){
  87. //二维数组
  88. int dimension2[][] = {,,,};
  89. for(int i=;i<;i++){
  90. for(int j=;j<;j++){
  91. cout<<dimension2[i][j]<<" ";
  92. }
  93. cout<<endl;
  94. }
  95. //三维数组
  96. int magic[][][];
  97. for(int i=;i<;i++){
  98. for(int j=;j<;j++){
  99. for(int k=;k<;k++){
  100. magic[i][j][k] = i+j+k+;
  101. cout<<"magic["<<i<<"]["<<j<<"]["<<k<<"]:"<<(i+j+k+)<<" ";
  102. }
  103. cout<<endl;
  104. }
  105. cout<<endl;
  106. }
  107. }
  108. /*
  109. 1 2
  110. 3 4
  111. magic[0][0][0]:3 magic[0][0][1]:4 magic[0][0][2]:5
  112. magic[0][1][0]:4 magic[0][1][1]:5 magic[0][1][2]:6
  113. magic[0][2][0]:5 magic[0][2][1]:6 magic[0][2][2]:7
  114.  
  115. magic[1][0][0]:4 magic[1][0][1]:5 magic[1][0][2]:6
  116. magic[1][1][0]:5 magic[1][1][1]:6 magic[1][1][2]:7
  117. magic[1][2][0]:6 magic[1][2][1]:7 magic[1][2][2]:8
  118.  
  119. magic[2][0][0]:5 magic[2][0][1]:6 magic[2][0][2]:7
  120. magic[2][1][0]:6 magic[2][1][1]:7 magic[2][1][2]:8
  121. magic[2][2][0]:7 magic[2][2][1]:8 magic[2][2][2]:9
  122. */
  123.  
  124. //向数组的指针
  125. void array2(){
  126. double *p;//指向数组的指针
  127. double balance[] = {10009.0,,57.56,4546.7,464.45,,,,};
  128. //balance指向balance[0]的地址;
  129. //balance = &balance[0];
  130.  
  131. p = balance;
  132. cout<<*p<<endl;//
  133. cout<<(*p+)<<endl;//
  134. cout<<*(p+)<<endl;//57.56
  135. cout<<*(p+)<<endl;//3.65854e-317[error]
  136. }
  137.  
  138. //传递数组给指针
  139. void array3(){
  140. //way 1
  141. /*形式参数是一个指针:
  142. void myFunction(int *param){
  143. ...
  144. }
  145. */
  146.  
  147. //way2
  148. /*形式参数是一个已定义大小的数组:
  149. void myFunction(int param[10]){
  150. ...
  151. }
  152. */
  153.  
  154. //way3
  155. /*形式参数是一个未定义大小的数组:
  156. void myFunction(int param[]){
  157. ...
  158. }
  159. */
  160. }
  161.  
  162. //从函数返回数组
  163. // 要生成和返回随机数的函数
  164. int * getRandom( ){
  165. static int r[];
  166.  
  167. // 设置种子
  168. srand( (unsigned)time( NULL ) );
  169. for(int i = ; i < ; ++i){
  170. r[i] = rand();
  171. cout << r[i] << endl;
  172. }
  173.  
  174. return r;
  175. }
  176. void array4(){
  177. /*如果您想要从函数返回一个一维数组,您必须声明一个返回指针的函数,如下:
  178. 另外,C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。
  179. int * myFunction(){
  180. ...
  181. }
  182. */
  183.  
  184. // 一个指向整数的指针
  185. int *p;
  186.  
  187. p = getRandom();
  188. for ( int i = ; i < ; i++ ){
  189. cout << "*(p + " << i << ") : ";
  190. cout << *(p + i) << endl;
  191. }
  192. }
  193. /*
  194. 7591
  195. 6650
  196. 25660
  197. 16948
  198. 17093
  199. 16274
  200. 9181
  201. 9305
  202. 8828
  203. 21059
  204. *(p + 0) : 7591
  205. *(p + 1) : 6650
  206. *(p + 2) : 25660
  207. *(p + 3) : 16948
  208. *(p + 4) : 17093
  209. *(p + 5) : 16274
  210. *(p + 6) : 9181
  211. *(p + 7) : 9305
  212. *(p + 8) : 8828
  213. *(p + 9) : 21059
  214. */
  215.  
  216. //字符串<cstring>/<string.h>
  217. void string_(){
  218. // strcpy(s1, s2);
  219. // 复制字符串 s2 到字符串 s1。
  220.  
  221. // strcat(s1, s2);
  222. // 连接字符串 s2 到字符串 s1 的末尾。
  223.  
  224. // strlen(s1);
  225. // 返回字符串 s1 的长度。
  226.  
  227. // strcmp(s1, s2);
  228. // 如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。
  229.  
  230. // strchr(s1, ch);
  231. // 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
  232.  
  233. // strstr(s1, s2);
  234. //返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。
  235.  
  236. // char *str1 = "678676";
  237. // cout<<str1;//678676
  238. // char *str2 = "hello ";
  239. // strcpy(str1,str2);//error
  240. // cout<<strlen(str2)<<endl;//
  241.  
  242. char str_a[] = {'','','','','',''};
  243. char str_b[] = {'h','e','l','l','o'};
  244. strcpy(str_a,str_b);
  245. cout<<str_a<<str_b;//hellohello
  246.  
  247. }
  248.  
  249. //指针
  250. void pointer(){
  251. int var = ;//普通变量
  252. int *p;//指针变量:指针变量是指存放地址的变量[百度百科]
  253. //指针变量
  254. //value:引用值/变量的地址
  255. //address:指针变量的地址
  256.  
  257. p = &var;//指针变量赋普通变量的地址值
  258.  
  259. //空指针
  260. //在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。
  261. //赋为 NULL 值的指针被称为空指针。
  262. //在大多数的操作系统上,程序不允许访问地址为 0 的内存,因为该内存是操作系统保留的。
  263. //然而,内存地址 0 有特别重要的意义,它表明该指针不指向一个可访问的内存位置。
  264. //但按照惯例,如果指针包含空值(零值),则【假定它不指向任何东西】。
  265. double *ip = NULL;
  266. // cout<<ip<<" "<<(*ip)<<endl;//error
  267.  
  268. }
  269.  
  270. //指针数组
  271. //优先级:()>[]>*
  272. /*
  273. 一个指向字符的指针数组来存储一个字符串列表
  274. */
  275. #define MAX 3
  276. void pointerArray(){
  277. //数组指针(也称行指针)
  278. //定义 int (*p)[n];
  279. //()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。
  280.  
  281. //如要将二维数组赋给一指针,应这样赋值:
  282. int a[][];
  283. int (*p)[]; //该语句是定义一个数组指针,指向含4个元素的一维数组。
  284. p = a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
  285. p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]
  286.  
  287. //所以数组指针也称指向一维数组的指针,亦称行指针。
  288.  
  289. for(int i = ;i < ;i++){
  290. for(int j=;j < ;j++){
  291. a[i][j] = i+j-;
  292. }
  293. }
  294. p = a;
  295. for(int i=;i<;i++){
  296. cout<<*(p[i]+)<<" "<<p[i]<<endl;//0x70fda0
  297. }
  298. //////////////////////////////////////////////////////////
  299. int var[MAX] = {, , };
  300. int *ptr[MAX];//指针数组 (优先级:[]大于*(间接访问))
  301.  
  302. for (int i = ; i < MAX; i++){
  303. ptr[i] = &var[i]; // 赋值为整数的地址
  304. }
  305. for(int i = ; i < MAX; i++){
  306. cout << "Value of var[" << i << "] = ";
  307. cout << *ptr[i] << endl;
  308. }
  309. /////////////////////////////////////////////////////////
  310.  
  311. //优先级:()>[]>*
  312. int *pointer=NULL;//(普通)指针变量,仅能指向单个地址
  313. int *poniter2[];//指针数组变量,指向三个地址
  314. int (*poniter3)[];//数组指针变量【行指针】,一个指向行长度为4的数组的指针变量
  315. }
  316. /*
  317. -9 0x70fd60
  318. -8 0x70fd70
  319. -7 0x70fd80
  320. Value of var[0] = 10
  321. Value of var[1] = 100
  322. Value of var[2] = 200
  323. */
  324.  
  325. //多级指针(指向指针的指针)
  326. void pointerToPointer(){
  327. int var = ;
  328. int *p = &var;
  329. int **pp = &p;//指向指针的指针
  330.  
  331. cout<<(&var)<<" "<<p<<" "<<*(pp)<<endl; //0x70fe0c 0x70fe0c 0x70fe0c
  332. cout<<(&var)<<" "<<(&p)<<" "<<pp<<" "<<&(pp)<<endl; //0x70fe0c 0x70fe00 0x70fe00 0x70fdf8
  333. cout<<var<<" "<<*p<<" "<<*(*pp)<<endl; //100 100 100
  334. }
  335.  
  336. int main(){
  337. // math();
  338.  
  339. // randNum();
  340.  
  341. // array();
  342. // array2();
  343. // array3();//传递数组给指针
  344. // array4();//从函数返回数组
  345.  
  346. // string_();
  347.  
  348. // pointerArray();//指针
  349. pointerToPointer();//多级指针
  350. system("pause");
  351. return ;
  352. }

[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. ceph 搭建nginx负载3个对象网关

    nginx.conf user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid ...

  2. VMware配置Linux中APPache服务器

    [软件] VMware    SecureCRT [镜像文件] Centos6.8   APPache软件包 [步骤] 1.将所需文件通过SCRT传入到虚拟机中 2.挂载镜像 2.1 将镜像挂载到mn ...

  3. 最小费用最大流spfa

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

  4. 说说Java 位运算

    前言 我们都知道,在计算机世界里,再复杂,再美的程序,到最后都会变成0与1.也就是我们常说的:二进制.二进制相信大家都很熟悉.与现实世界不同的是,在现实世界里,我们通常都是用十进制来表示的,也就是遇十 ...

  5. 【BZOJ2302】[HAOI2011]Problem C(动态规划)

    [BZOJ2302][HAOI2011]Problem C(动态规划) 题面 BZOJ 洛谷 题解 首先如果\(m=0\)即没有特殊限制的话,那么就和这道题目基本上是一样的. 然而这题也有属于这题的性 ...

  6. 4月1日->-4月15日 2周阶段性计划

    4月1日->4月14日 ST表 树状数组 LCA 一周的时间,力求掌握这三个知识点并各刷五道题左右. 树状数组 ST表 LCA 然而:进展总比计划快(......什么鬼) 树状数组刷了5题,ST ...

  7. MATLAB:图像的移动(move函数)

    图像移动涉及到move函数,实现过程如下: close all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clear all; clc; I=imread('lenna.bmp ...

  8. 中南大学2018年ACM暑期集训前期训练题集(入门题) X: 又一道简单题

    简直智障,上一题V题,样例输出里面的“Case:”不要输出,到了这题又是要输出的了 #include<iostream> using namespace std; int num[1000 ...

  9. logistic regression浅析

    最近开始学习机器学习的相关理论知识,准备把自己的整个学习心得整理汇集成博客,一来可以督促自己,二来可以整理思路,对问题有一个更加透彻的理解,三来也可以放在网上和大家分享讨论,促进交流. 由于这次的学习 ...

  10. 高效的SQLSERVER分页查询

    Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询 ...