引子:
为了进军IOS,虽然之前自己自学很久但是好久没碰C了,感觉有点生疏了,不想扔下,于是乎写一篇日志回忆一下。
A>什么是指针
B>什么是数组
C>指针与数组有什么关系?
(最基本的几个概念,学C必须懂的 ,不懂可以百度,希望对菜鸟们有用,也可以留言给我哦)
内存管理
1.代码段:存放操作指令,readonly
2.数据段:存放已初始化的全局变量,也就是存放静态分配的变量和全局变量
3.BBS段:存放未初始化的全局变量,内存中BBS段全置0
4.堆(heap):存放程序中动态分配的内存
5栈:存放局部变量,但不包括static变量
(画个图 让大家更明白 哈哈 图画的真不错,看了的人可以想一下那个波浪代表什么意思,想知道的可以留言)
1.进程空间地址如何管理
2.进程地址如何映射到物理内存
3.物理内存如何被管理
虚拟内存管理技术
用户空间
内核空间
(内存管理还是要好好学,自己感觉操作系统没怎么学好,还要加深啊 )
自定义strlen函数。(不用任何自定义变量)
int my_strlen(const char *str)
{
assert(str==NULL);
return ('/0'==str)? 0 , 1+my_strlen(++str);
}
//(C语言中有些很巧妙的方法,很好玩的,但是不推荐,因为有好多我自己也忘了,在保证大家能读懂的情况下还是可以用的)
/************************************************************************************************************************************************************************/
int a[5];
当a作为右值时代表数组元素的首地址,而非数组的首地址
a <==>&a[0]
!!! a不能作为左值
&a+1偏移量为 sizeof(a)
&a代表数组a的首地址
指针与指针数组
int *p1[10];//指针数组
int (*p2)[]10;//数组指针 相当于 int (*)[10] p2;//匿名数组
[]优先级高于*
inta[5][5];
int (*p)[4];
p=a;
问: &p[4][2] - &a[4][2]的值为多少?
解释:a代表a[0]的首地址
void fun(char a[3][4]);
<====>
void fun(char (*p)[4]);
<====>
void fun(char p[][4]);
//因为a代表a[0]的首地址
void fun(char *p[4]);
<====>
void fun(char **p);
char a[3][4] ;<====> char (*p)[10];
char *a[5];<====>char**p;
(怎么说呢 数组与指针是很好玩的东东 其实数组和指针没啥关系 他们只是穿着很像的衣服而已 所以要分清他们还得从本质上去区分
很搞的 但是觉得弄懂了会很有成就感)
内存对齐
(在结构体中要注意的,搞不好就会出个幺蛾子,很简单 不解释 不懂请举手)
/************************************************************************************************************************************************************************/
const
(1)定义const常量
(2)修饰函数参数、返回值、甚至函数体
(具体例子就不讲了 方法就是在*号那里画个竖线 )
extern “C”
C不支持函数重载,C++支持重载。
C++函数名编译后变为像_foo_int_int //函数参数会加到函数名中
(C与C++是两门不同的语言 不要认为C++包含C 而应该是C++兼容C 并不是包含 他们是两门不同的语言 至少编译规则就不同)
/************************************************************************************************************************************************************************/
自定义strcpy函数
原型:
char *strcpy(char *strDest, const char* strSrc)
{
assert((strDest!=NULL)&&(strSrc!=Nll));
char *address = strDest;
while((*strDest++ = *strSrc++)!='\0')
NULL;
return address;
}
这是C++string类里面的类方法 有空多看看 库函数 基本都写的很经典
我自己的技术也不是很强,只是看到哪学到哪,学东西也丢散落四的,写在这里留个纪念吧。 |