【linux】c++ 内存管理(二)
3. 指针与数组的比较
不同点:
数组:要么在惊天存储区域被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命周期内保持不变,只有数组的内容可以改变。
指针:可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。
两者特征比较的例子:
(1) 修改内容:
char a[] = “hello”;
a[0] = ‘x’ ; // ok
char *p = “hello”; //注意p指向常量字符串
p[0] = ‘x’; //错误。编译器不能发现该错误
指针p指向常量字符串”hello”(位于静态存储区,内容为hello),常量字符串的内容是不可以被改变的。企图修改常量字符串的内容而导致运行错误。
(2) 内容复制与比较
不能对数组名进行直接复制与比较,数组间复制应该使用标准函数strcpy进行复制。同理,比较b和a的内容是否相同,不能使用if( b == a )来判断,应该使用标准库函数strcmp进行比较。
语句p = a并不能将数组a的内容复制给指针p,而是把a的地址赋给了p,要想复制a的内容,可以先用库函数malloc为p申请一块容量为strlen(a) + 1 个字符的内存,再用strcpy进行字符串复制。同理,if( p == a) 比较的不是内容而是地址,应该用库函数strcmp比较。
// 数组
char a[] = “hello”;
char b[10];
strcpy( b, a); //不能用if( b == a)
…….
// 指针
int len = strlen(a);
char *p = (char *)malloc( sizeof(char) * ( len + 1) );
strcpy( p, a); // 不能用 p = a;
if( strcmp( p, a ) == 0 ) // 不能用if( p == a )
…….
(3) 计算内存容量
用运算符 sizeof 可以计算出数组的容量(字节数)。
下例中,sizeof (a)的值是12(注意别忘记了’’)。指针p指向a,但是sizeof(p)的值却是4(32位计算机),这是因为sizeof(p)得到的是一个指针变量的字节数,相当于sizeof(char *),而不是p所指的内存容量。
&nbs
相关文档:
为了方便编写程序,整理了vi设置的小方法!
由命令“vi --version”所显示的内容知vi的全局配置文件在/usr/share/vim/vim61/macros/vimrc;
用户配置文件在$HOME/.vimrc
搜索网上文章并实验得知:
设置TAB键的显示宽度:set tabstop=4 & ......
配置Linux wget,yum 使用代理访问网络。
如果你的linux主机需要通过代理服务器才能访问外部网络。可以通过如下方式实现。
1.wget
需要在当前用户的目录下创建一个".wgetrc"文件
[root@linux ~]#vi .wgetrc
http-proxy = 10.1.18.34:3128
ftp-proxy = 10.1.18.34:3128
分别表示http的代理服务器和ftp的代理服务器。如 ......
Linux Kernel学习笔记
Table of Contents
1. 存储器寻址
2. 设备驱动程序开发
3. 字符设备驱动程序
3.1. 设备号
3.2. 设备号的分配和释放
3.3. 重要的数据结构
3.4. 读和写
4. PCI设备
5. 内核初始化优化宏
6. 访问内核参数的接口
7. 内核初始化选项
8. 内核模块编程
8.1. 入门
8.2. 为模块添加 ......
c++库文件中的符号的含义:
所有的符号都是以下划线加上大写字母也就是"_Z"开头,对于在 类里或者命名空间中的符号,后面紧跟"N",然后是各个命名空间和类的名字,每个名字前是名字字符串的长度,随后是大写字母"E",对于一个函数,他的参数列表都在E后面, ......
1. man 对你熟悉或不熟悉的命令提供帮助解释
eg:man ls 就可以查看ls相关的用法
注:按q键或者ctrl+c退出,在linux下可以使用ctrl+c终止当前程序运行。
2. ls 查看目录或者文件的属*,列举出任一目录下面的文件
eg: ls /usr/man
ls -l
a.d表示目录(directory),如果是一个”-”表示是文件,如果是l则表示是 ......