数组和指针_吃鱼的小脸猫_新浪博客

  一、数组的定义及使用及分类

1、数组是用来存放一组数据的,而因为存放的数据可以分为不同种类,数组也分为不同种:intfloat,double ,char......

2、定义数组的方式和定义一个变量相似,都是数据类型+数组名[](变量名),数组长度可写可不写;在定义数组时如给予一定的长度,一定要分配足够的内存空间,确保所保存的数据不会越界(数组越界将会使用非法内存导致危险);

3、在一维数组名arr,表示整个数组时只有如下情况:

(1)为防止数组长度判断出错时,在定义数组的同一函数中可以用len=sizeof(arr)/sizeof(arr[0])来求出数组长度;

(2)在定义数组的同一个函数中,&arr+1,加整个数组的大小

(3)而在其他情况中,数组名代表的首元素的地址

4、在被调用函数中,形参数组被退化成指针(在本质上:数组在形参中已经是指针),同时在传递数组时同时需要传递数组长度(字符串数组除外,因为在字符串数组中有明显的\0’标志作为结束标志)

5、使用数组的方式数组名[下标]={存放的数据},下标是从0开始的,

在定义数组中数组名[len];

二、指针

1、指针通俗的讲就是地址

 Int *p=&a//定义一个整型指针,将整型地址值放入整型指针变量中

*的第一作用:在定义中起到说明是指针)

*p=100//a的值赋值为100

*的第二作用:解引用,通俗讲就是间接访问符)

Int **pp=&p//定义一个二级指针,(就是定义一个指针变量存放之前指针p的地址)

**pp=100//通过俩次解引用将a的值赋值为100

Int ***ppp=&pp//定义一个三级指针,(就是定义一个指针变量存放之前指针pp的地址)

***ppp=100//通过三次解引用将a的值赋值为100

2、指针分配的内存空间

指针的内存空间由平台决定,与数据类型无关,所以数据类型不影响指针的内存空间大小

 Cpu->os->编译器(每一个都是由它前一个所决定,呈金字塔型)

3264)位操作平台:指针48)个字节

3、指针的运算

(1)p++:是指加的一个单元格(而单元格由数据类型决定),所以指针运算需要调整权重(调整权重即为去掉一个*,求sizeof

(2)指针—指针=相差多少个单元格(调整权重)

(3)其他指针运算不存在,且指针的运算都需要调整权重

int arr[10];

int *q = &arr[9];//x+36

int *p= &arr[1];//x+4

printf("%d\n",q-p);//8

printf("%d\n",(char *)q-(char *)p);//32

printf("%d\n",(short **)q-(short **)p);//8

printf("%d\n",(double *)q-(double *)p);//4

printf("%d\n",(unsigned long long)q-(unsigned long long)p);//32

int *p = (int *)0x2010;

printf("%x\n",p-2);//2008

printf("%x\n",(char *)p-2);//200e

printf("%x\n",(short *)p-2);//200c

printf("%x\n",(double *)p-2);//2000

printf("%x\n",(char ***)p-2);//2008

printf("%x\n",(unsigned long)p-2);//200e

int *p = (int *)100;

printf("%d\n",p+4);//100+4*sizeof(int)=116

printf("%d\n",(char *)p+4);//104

printf("%d\n",(short *)p+4);//108,

printf("%d\n",(double *)p+4);//132

printf("%d\n",(char **)p+4);//116

printf("%d\n",(double ***)p+4);//116

printf("%d\n",(long long)p+4);//104

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值