4.9.2 在开发中经常会typedef int int32_t ; typedef short int16_t; 这样做的目的是便于在不同平台下的移植,如果当在另一个平台下,int 是64位的,但是我的项目中都是用的int32_t;
所以只需要修改int32_t就可以了,我可以让他typedef short int32_t;这样我只更改一次,其余的都改了,做到一改全改。
** 4.9.3 int **p; int *a[4]; p=a;可以这样理解:首先它是指针数组,既然是数组,则a即表示数组名又表示首元素的首地址,a[0]是一个一重指针,而a是a[0]的地址,
那么a就是一个二重指针;{ 一重指针的地址就是二重指针变量,所以有p=a; 而 int a[4][3] ,a和一维数组的意思是一样的,如 int a[3][6],int *p ;p=a[0];所以不能p=a,
int *a[3][3],int **p;p=a[0];}
** 4.9.4、二维数组是为了简化编程,平面型。数组以下标示方式访问其实是编译器封装起来的,实质是指针访问。int (*p)[5]; int a[2][5];则有 p=a; 关键是要把二维数组抽象成n行n列
用指针访问方式理解:二维数组可以看作是一个方格子的矩阵,比如a[2][5],那么就是2行5列的10个小格子,第一行可以收纳起来变成一个指向一维数组的指针,第二行也是如此;
这样收纳后就变成了一个新的数组a[2],每一个格子存放的是它收纳的第一个元素的地址,如a[0]存放的是第一行第一列元素的地址,“a”[1]存放的是第二行第一列的地址;
再与一维数组相联系,一维数组名即表示数组名又表示数组第一个元素的地址,所以a[2][5]中的a表示“a"[2]数组第一个元素的地址;那么再把p=a;层层推递,(p+i)表示
指向第几行的地址,*(p+i)表示取第几行的值(而这个值存放的是第几行一列元素的首地址),*(p+i)+j 表示指向第几行第几列的地址,最后在引用这个地址,*(*(p+i)+j)
就表示第几行第几列的值了。
一重指针----------->一维数组
二重指针----------->指针数组
数组指针----------->二维数组
函数指针----------->普通函数
}
五、数组&字符串&结构体&共用体&枚举(5.6?)
{
5.1、c语言中定义一个字符串: char a[6]={'l','i','n','u','x','\0'}; '\0'的字符编码为0就是NULL;也就是说内存中遇到0,翻译成字符是就是'\0',或这是NULL;
char a[6]="linux";
char *p="linux";
5.2、 sizeof(a)=6是运算符,其意思是所占空间大小,包括字符串后面的‘\0',strlen(a)=5是一个函数,其意思是字符串的长度。strlen( p);其中p只有是字符指针变量才有意义,
它的形参是数组变量是没有意义的,因为strlen是根据什么时候遇到 '\0',才结束测试字符串的长度,就算数组不初始化也是有长度的。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33816-5.html
最主要良莠不齐
ipad连热点玩游戏玩的好好的