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指针数组的主要内容,如果未能解决你的问题,请参考以下文章

12354

C++如何用new动态开辟一个一维字符数组

150809112 杨磊

二维数组动态开辟与释放

浅谈C语言的动态内存开辟

写入位置时发生訪问冲突