interview_c_base
const
第一种情况:
const int a = 8;
int const b = 9;
// a = 7; /* ERROR */这两种写法是一样的,表示a和b都是常量,不可改变,所以一定要给变量初始化,否则之后就不能再进行赋值了
第二种情况:
const int *p;
or
int const *p;
int a = 9;
int b = 10;
p = &a;
// *p = 8; /* ERROR */
a = 8;
p = &b;常量指针,表示p指向的内容是常量。需要注意两点:
常量指针指不能通过这个指针改变变量的值,但是还是可以通过其他的引用来改变变量的值的。
常量指针指不能通过这个指针改变变量的值,但是这并不是意味着指针本身不能改变,常量指针可以指向其他的地址。
第三种情况:
指针常量,表示指针p是个常量,它本身不可改变。需要注意的是,指针本身不可变,但指向的对象可变。
第四种情况:
指向常量的指针常量,表示指针本身不可变,也不能通过指针修改所指向地址的内容。需要注意的是,依然可以通过其他引用修改该指针指向地址的内容。
进程的内存布局
stack
存放局部变量
head
存放由malloc分配
data
存放初始化的全局变量
bss
存放未初始化的全局变量
text
存放代码
需要注意:
未初始化的全局变量,相当于初始化为零的全局变量,存放 bss section
字符串存放在 text section
union
共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员
共用体占用的内存等于最长的成员占用的内存
大小端模式
大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中
小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中
下面以unsigned int value = 0x12345678为例,分别看看在两种字节序下其存储情况,我们可以用unsigned char buf[4]来表示value
buf[0]
0x4000
0x78
0x12
buf[1]
0x4001
0x56
0x34
buf[2]
0x4002
0x34
0x56
buf[3]
0x4003
0x12
0x78
用C语言实现冒泡排序
不调用库函数,实现strcpy函数的功能
用C语言实现判断大小端的程序
不调用库函数,实现atoi函数的功能,字符串转整形
用C语言实现字符串反转功能
获得字符频次唯一的最小删除次数
亲密字符串
链表反转
Last updated
Was this helpful?