20150421、20150422指针数组

本文深入探讨了指针与数组的关系,包括一级和二级指针的概念、不同类型的指针操作、指针与数组名的区别、指针数组及数组指针的应用、以及动态内存分配等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.二级指针

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申请的内存销毁,然后重新申请内存




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值