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指向的内容是常量。需要注意两点:

  1. 常量指针指不能通过这个指针改变变量的值,但是还是可以通过其他的引用来改变变量的值的。

  2. 常量指针指不能通过这个指针改变变量的值,但是这并不是意味着指针本身不能改变,常量指针可以指向其他的地址。

第三种情况:

指针常量,表示指针p是个常量,它本身不可改变。需要注意的是,指针本身不可变,但指向的对象可变。

第四种情况:

指向常量的指针常量,表示指针本身不可变,也不能通过指针修改所指向地址的内容。需要注意的是,依然可以通过其他引用修改该指针指向地址的内容。

进程的内存布局

section
说明

stack

存放局部变量

head

存放由malloc分配

data

存放初始化的全局变量

bss

存放未初始化的全局变量

text

存放代码

需要注意:

  • 未初始化的全局变量,相当于初始化为零的全局变量,存放 bss section

  • 字符串存放在 text section

union

共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员

共用体占用的内存等于最长的成员占用的内存

大小端模式

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中

小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中

下面以unsigned int value = 0x12345678为例,分别看看在两种字节序下其存储情况,我们可以用unsigned char buf[4]来表示value

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?