2015042120150422指针数组
Posted wzg31796
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2015042120150422指针数组相关的知识,希望对你有一定的参考价值。
一.二级指针
1.指针之间不同类型不能相加
2.指针的类型很重要,决定指针的长度,解析方式
3.指针不能指向数据类型不同的数据
4.指针的类型决定了指针从指针的值前进几个字节
5.const在*左边,可以改变指向,不能修改所修饰变量的值,const在*的右边,不可改变指向,但可以修改值
6.const int * const p 指向和数据都不可以改变
7.数组名的本质就是常量指针
int a[5]=0;
int * const p=a;
五.指针优先级
1.*p++,++先执行
2.++*p,*p先执行,优先级接触生效
六.指针与数组名
1.int a[10]=1,2,3,4,5,6,7,8,9,10
a是一个指针,步长为4,&a是一个数组指针,步长为40,*a指向一列,步长为4
2.int b[3][4]=1,2,3,4,5,6,7,8,9,10,11,12
b等价于行指针,步长为一行的大小,&b步长就是整个数组,*b步长为一列的一个元素,步长为4
七.指针数组与数组指针
1.实例
_declspec(dllexport)go()
int *p[5];
p[0] = 0xadfc70;
p[1] = 0xae0720;
p[2] = 0xae0850;
p[3] = 0xae05f0;
p[4] = 0xae04c0;
while (1)
for (int i = 0; i < 5; i++)
if (*p[i] < 100)
*p[i] = 101;
Sleep(2000);
八.二维数组
1.二维数组名本质 int (*p)[5]=a; 指向一个固定长度的数组的常量指针
2.int a[10],a是int *指针, &a 是int (*)[10]类型,数组指针
int a[3][5],a int (*)[5],&a,int (*)[3][5]面指针, *a是int *指针
3.二维数组等同于
*(*(a+i)+j)
一.指针数组
1.指针数组作为参数的时候,数组名退化为二级指针
2.动态二维数组列必须是确定的,行可以动态分配
int (*p)[5]=malloc(sizeof(int)*30);
3.动态一维数组
int *p=malloc(sizeof(int)* 30)
二.3中数组形态
1.int *p=(int[30])0; 创建数组,栈上,静态分配,编译的时候确定大小
三.四大内存分配函数
1.malloc和calloc区别:
两者都是动态分配内存。主要的不同是malloc不初始化分配的内存,已分配的内存中可以是任意的值. calloc 初始化已分配的内存为0。次要的不同是calloc返回的是一个数组,而malloc返回的是一个对象。
malloc它允许从空间内存池中分配内存, malloc()的参数是一个指定所需字节数的整数.
例如:P=(int*)malloc(n*sizeof(int));
colloc与malloc类似, colloc需要两个参数,第一个是需要分配内存的变量的个数, 第二个是每个变量的大小.
例如:P=(int*)colloc(n,sizeof(int));
2.realloc:在malloc申请的内存的基础上拓展内存,如果在已申请的内存后有连续空间,则申请连续空间,没有连续空间则开辟一块新的内存,原来的内存被free
3._recalloc:为calloc拓展内存,会把calloc申请的内存销毁,然后重新申请内存
以上是关于2015042120150422指针数组的主要内容,如果未能解决你的问题,请参考以下文章