对于动态分配的内存在使用前一定要检验是否分配成功,在使用完成之后进行释放。
检验方法:
int *p = (int *)malloc(10 * sizeof(int));
if (p == NULL)
{
printf("out of memory\n");
return 1;
}
指针和数组的对比:
指针用来保存数据的地址,数组保存数据,数组名代表数组的首元素地址,&a才是整个数组的地址。
指针间接访问数据,数组直接访问数据,但其本质上都是数组名加上偏移地址。
指针用于动态数据结构,数组存储固定数目类型相同的元素。
指针使用malloc和free完成创建和释放,数组是隐式的。
指针通常指向匿名数据,数组自身是数组名。
数组指针是指向一个数组的指针。指针数组是是一个数组,里面的每一个元素都存放地址。
指针加一是加上指针所指向的类型。
讲一个数组指针强制类型转换再加一便不是加的是数组的大小,而是依据类型转换而定。
比如int (*p)[10] 转换成(int *)p+1 便是加4.
大小端存储:
11 22 33 44
大端存储为11 22 33 44
小端存储 44 33 22 11
判断方法:
(1)
#include<stdio.h>
int main()
{
int a=1;
if(1==*(char*)&i)
{
printf("小端\n");
}
else printf("大端");
return 0;
}
(2)
#include<stdio.h>
union un
{
int i;
char c;
}
int main()
{
union un un={0};
un.i=1;
if(un.c==1)
{
printf("小端\n")
}
else
printf("大端\n");
return 0;
}
a[2][2]={(1,2),(3,4)}此种表达式为逗号表达式,真实内容为 2,4,0,0
二维数组的地址传递方式有俩中 1 二维数组的方式 2指针数组的数组名的方式
转载于:https://blog.51cto.com/10725723/1716307