您的位置:首页 > 其它

20150421、20150422指针数组

2016-06-11 09:19 232 查看
一.二级指针

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申请的内存销毁,然后重新申请内存
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: