首先先给上代码

#include<iostream>
using namespace std;void sz_1()
{const int maxsize = 100;int const maxsize1 = 50;cout<<"maxsize:"<<maxsize<<endl;cout<<"maxsize1:"<<maxsize1<<endl;}void sz_2()
{char buffer[5] = "char";char buffer_1[5] = {"char"};//char buffer_2[5] = {'c','h','a','r'};//char buffer[5] = "12345";int sz[5] = {1,2,3,4};cout<<"sz[4]:"<<sz[4]<<endl;cout<<"buffer:"<<buffer<<endl;//cout<<"buffer_1:"<<buffer_1<<endl;cout<<"sz:"<<sz<<endl;//cout<<"buffer_2:"<<buffer_2<<endl;char hello[] = "hello world";int length = sizeof(sz)/sizeof(int);cout<<"hello:"<<hello<<endl;cout<<"length:"<<length<<endl;
}void sz_3()
{const int maxsize = 50;long long sl[maxsize];sl[0] = 1;sl[1] = 1;for(int i=2;i<maxsize;i++)sl[i] = sl[i-1] + sl[i-2];for(int i = 0;i<maxsize;i++)cout<<sl[i]<<endl;
}void sz_4()
{char array[30];cin.get(array,30);cout<<"array:"<<array<<endl;//cout<<array[6]<<endl;
}void sz_5(int a[])
{int length = sizeof(a)/sizeof(int);int sum = 0;for(int i=0;i<5;i++){sum += a[i];//sum = sum + a[i]}cout<<"length:"<<length<<endl;cout<<"sum:"<<sum<<endl;
}void sz_6(int two[][3],int three[])
{cout<<two[1][1]<<endl;cout<<three[1]<<endl;
}int main()
{int one[] = {1,2,3,4,5};int two[3][3] = {{1,2,3},{4,5,6},{7,8,9}};//sz_1();//sz_2();//sz_3();//sz_4();//sz_5(one);//sz_6(two,&two[0][0])
}
#include<iostream>
using namespace std;
#include<stdlib.h>
#include<string.h>void zz_1()
{int c = 5;int * a = &c;cout<<"c的地址是:"<<&c<<endl;cout<<"a指针的地址是:"<<&a<<endl;cout<<"a指针指向变量的地址是:"<<a<<endl;cout<<"a指针指向变量的值是:"<<*a<<endl;
}void zz_2()
{int c = 5;int d = 10;const int * a = &c;//*a = 7;int * const b = &c;//b = &d;int const * e = &c;//*e = 7;const int * const f = &c;//*f = 10;//f = &d;
}void zz_3()
{int * a;*a = 55;cout<<a<<endl;
}void zz_4()
{int array[10];for(int i=0;i<10;i++)array[i] = i;int * a = array;//int *a = &array[0]int sum = 0;for (int i=0;i<10;i++){sum += *a;a++;}cout<<"sum:"<<sum<<endl;}void zz_5()
{int array[10];for(int i=0;i<10;i++)array[i] = i;//array++;
}void zz_6()
{int * array = (int*)malloc(40);for(int i = 0;i<10;i++){array[i] = i;cout<<array[i]<<endl;}free(array);cout<<array[0]<<endl;
}void zz_7()
{int *array = new int[10];for(int i = 0;i<10;i++){array[i] = i;cout<<array[i]<<endl;}delete[] array;cout<<array[2]<<endl;}void zz_8()
{char *a = "char";char *b = "char";/*if ("char" == "char")cout<<"equal"<<endl;elsecout<<"not equal"<<endl;*/if (strcmp(a,b)==0)cout<<"equal"<<endl;elsecout<<"not equal"<<endl;}int main()
{//zz_1();//zz_2();//zz_3();//zz_4();//zz_5();// zz_6();//zz_7();//zz_8();}
                          数组

数组: 类型说明符 数组名[常量表达式]
常量表达式(sz_1) int const maxsize = 100;
const int maxsize = 100;
也就是说,定义数组时下标必须确定

例如:(sz_2)字符数组 char buffer[5] = {1,2,3,4,5};(定义+初始化)

  (数组一旦定义,再想给数组赋值就只能一个一个元素访问了)int数组的空余会用0补全注意:字符数组可以当作字符串使用,但5个元素的字符数组,字符串最长为4,因为最后一个元素用于‘\0’,用‘\0’字符结束的字符数组可以构成一个字符串。char buffer[5] = “char”;整数数组 int array[] = {1,2,3,4};可以用sizeof(array)/sizeof(int)来确定长度注意:当没有常量表达式的时候,可以根据你的初始化来确定长度。

用数组实现斐波拉契数列(优点:思路简单,易读性高)(sz_3)

你也可以用输入的方法的来给字符数组(字符串)赋值。(sz_4)

把数组传递给函数(sz_5),但是数组长度用sizeof就不可靠了

二维数组:
Eg:int b[2][3] = {{1,2,3}{4,5,6}}
还可以省略第一维大小:
Int b[][3] = {1,2,3,4,5,6}

普通二维数组传递和降维传递(sz_6)

   指针

指针的定义语句:由数据类型后跟*号,再跟随指针变量名组成。

每一个变量都有值域和地址域,指针也是变量。但指针的值域是地址(它指向的那个值的地址),所以指针的作用就是存其他变量的地址。

  • :取值符,取的是指针指向的那个变量的值
    &:取地址符,取变量的地址 (这两条非常重要!!!)(zz_1)
    int c = 5;
    Int * a = &c;(注意,指针只能指向该数据类型的变量)
    在指针定义中,一个*只能表示一个指针

(zz_2)
const int * a = &c; (const 修饰的是int,即指向的int变量的值不能变,即妄图用 *a=?来改变c是不被允许的)

int * const a(const 修饰的是a,a代表一个指针地址,因此a不能再指向其他的int变量了)

int const * a 与 const int * a 作用相同

Int const * const a 都不能改变

指针忘了赋值很危险(zz_3)
指针运算(zz_4)指针运算能用于加减法。但必须有意义。不然会是危险的,比如指向数组首地址的指针,做减法,就会是危险的。

注意:++a 与a++,
a++:先赋值再相加
++a:先相加再赋值

下标操作不是针对数组,而是针对地址:
比如数组int a[] 的首地址是a,而a+i就是第i+1个元素的地址。
*(a+i)就是第i+1个元素的值,体会一下这里为啥是i+1

数组名是指针常量,不是指针变量,即数组首地址不是左值,不能修改,也就是说,不能做指针(地址)运算。
(zz_5)中的array++修改了数组首地址,故报错。(那行被我注释了,因为不注释过不了编译)
堆内存分配:
申请堆空间(允许在执行时而不是在编译时申请)
eg:int array = (int )malloc(arraysize*sizeof(int));
(zz_6) arraysize是地址个数
arraysize*sizeof(int) 其实就是说你要申请多大的内存空间
最后可用free(array)释放堆空间;

c++中不同于C的申请堆空间
new与delete:
new的使用要比malloc方便一些。
(zz_7)
注意:
1)c++中delete指针后,这块内存仅被标记为可以使用,在没有被分配之前里面的内容还是完好的。而且delete不负责将指针设置为NULL。
2)使用已经delete的指针的行为是未定义的,这种指针成为悬挂指针(指针指向非法的内存地址,也称为野指针),不要依赖于这类行为。
3)是否在delete之后立马设置指针为NULL呢,关于这个问题,很多人看法不太统一。
同理free也一样

指针函数:返回值是指针的函数,也就是说,返回值是一个地址
eg:int * () {}
指针函数不能返回局部变量的地址,但可以返回全局,静态,堆变量的地址。

Void 指针,空类型指针。不指向任何类型。仅仅只是一个地址。空类型指针不能进行指针运算,也不能进行间接引用。
关于字符串比较(zz_8)

指针数组:元素是指针的数组
eg:int * a[];
指针数组有时也可以用二维数组表示;

指针数组名是指向指针的指针,即二级指针;

C加加中的数组与指针-基础语法相关推荐

  1. c语言指针转换成数组,浅议C语言中灵魂数组和指针的互操作(转)

    浅议C语言中灵魂数组和指针的互操作(转)[@more@]曾听好多朋友说,C是一种怀旧的语言,因为它的历史很久远,然而自从各种面向对象的编程语言的相续出现让它的影响力日减. 当然了,这是无可非议的,但是 ...

  2. 【VS开发】【编程开发】【C/C++开发】结构体中的数组与指针的内存分配情况说明...

    [VS开发][编程开发][C/C++开发]结构体中的数组与指针的内存分配情况说明 标签:[VS开发] [编程开发] 主要是疑惑在结构体定义的数组的内存空间与指针动态分配的内存空间,在地址上连续性.以及 ...

  3. python怎么定义整数数组_python中输入整数数组长度python基础语法

    变量 数字类型 运算符 流程控制 while循环 dead loop continue vs break while else 变量(Varibles) W WW.002pc .COM认为此文章对&l ...

  4. C语言中的sizeof中的数组和指针

    1.引子 今日在看动态规划的0-1背包问题,看完后还是打算自己写着试试,毕竟实践才能出真知嘛.动态规划的结果是个二维数组dp,我copy书上的例子进行初始 memset(dp,0,sizeof(dp) ...

  5. c++中的数组和指针,引用

    按大类可以分为: 1.数组: 1.类中的数组,类中的数组被当作一组变量来看待. 2.函数参数中的数组,形参数组被当作是指针. 3.new 和 delete 意思是释放指针所指向对象所占的内存空间,然后 ...

  6. C++中的数组与指针

    数组与指针看起来很像 int a[] = {1, 2 ,3}; int *p = a; 如此,我们可以p[0], p[1], p[2] 看起来,与直接使用数组名没什么两样,但是看这段代码 sizeof ...

  7. java指针的数组_Java中的数组是指针

    Java中的数组byte[] , int[] 之类的, 遵循的原则, 所有用到某个数组的变量都是指向的同一个引用 public class Test { @org.junit.Test public ...

  8. 二维数组及其指针基础

    编程学习-二维字符串数组的初始化-动态内存分配 动态内存分配 1.堆内存分配 : C/C++定义了4个内存区间:代码区,全局变量与静态变量区,局部变量区即栈区,动态存储区,即堆 (heap)区或自由存 ...

  9. c语言指针加括号,C语言数组,指针和方括号赋值和输出产生不同结果?

    背景: 下述函数的作用,是将字符数组倒叙转化为整型数组,但是运行过程中,*b这种形式,就能正常赋值,输出:b[test_count]这种形式就不能正常赋值,输出 编译工具:Visual studio ...

最新文章

  1. Python-memcached的基本使用
  2. django 数据库迁移注意事项
  3. python封装api linux_python Socket编程-python API 与 Linux Socket API之间的关系
  4. 《神策军》第三期来袭!
  5. 使用npm init生成package.json
  6. shell脚本详解(四)——循环语句之while循环和until循环(附加例题及解析)
  7. 53.Azure中CentOS的Docker里安装运行SQL Server容器
  8. Unitest框架的使用(三)TestSkip和TestSuite方法
  9. 如何连接到远程SQL Server
  10. 人人讲思政 门门谈育人文章计算机专业,材有新闻|我院开展“课程门门有思政,教师人人讲育人”大讨论活动...
  11. C++模板编程(18)---模板实例化instantiation
  12. unable to resolve column. This inspection performs unresolved sql references check.
  13. 内存卡数据被格式化如何恢复?
  14. UART数据发送和接收(Verilog)
  15. linux gt; gt;gt;区别,linux中amp;gt;什么意思? - 懂得
  16. jav中spark迁移hive到mongo(更新数据)
  17. java Instant
  18. 软件工程专业课实验报告
  19. 阿莫电子论坛 莫进明 涉嫌用户数量造假
  20. SCL语言适用于哪些场景?

热门文章

  1. Python程序设计快速入门01
  2. 界面原型创建工具Axure使用教程之一:基本操作
  3. FLV文件推流到Nginx(C++实现)
  4. php音视频点播,使用 PHP 搭建自己的视频点播网站
  5. 如鹏网学习笔记(十三)EasyUI
  6. 排序算法-插入排序的时间复杂度分析
  7. 必须推荐几个程序员硬核大佬 陪你在线过年
  8. 粒子群算法matlab代码(注释很详细哦,图像也美美哒,任意维度)
  9. 如何把安卓系统刷成linux,废旧Android手机如何改造成Linux服务器?
  10. Debug_C++:关于逻辑或在合法性检测中的问题