对于动态分配的内存在使用前一定要检验是否分配成功,在使用完成之后进行释放。

检验方法:

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指针数组的数组名的方式