对于动态分配的内存在使用前一定要检验是否分配成功,在使用完成之后进行释放。
检验方法:
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指针数组的数组名的方式
本文出自 “fun” 博客,请务必保留此出处http://10725723.blog.51cto.com/10715723/1716307
原文:http://10725723.blog.51cto.com/10715723/1716307