易截截图软件、单文件、免安装、纯绿色、仅160KB

【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


相关文档:

C++ 调C C调c++

一、c++ 调C:
/* c语言头文件:cExample.h */
#ifndef C_EXAMPLE_H
#define C_EXAMPLE_H
#ifdef __cplusplus
extern "C"
{
#endif
int add(int x,int y);
#ifdef __cplusplus
}
#endif
 
#endif
/* c语言实现文件:cExample.c */
#include "cExample.h"
int add( int x, int y )
{
 return ......

配置Linux wget,yum 使用代理访问网络

配置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下Apache2+MySQL5+PHP5安装

安装环境:VMware Workstation 5.5.0 build-18463
Linux版本:Red Hat Enterprise Linux AS (2.6.9-42.EL)
软件版本:MySQL5 - mysql-5.0.37.tar.gz
     Apache2 - httpd-2.2.4.tar.gz
     PHP5 - php-5.2.1.tar.gz
     (将以上文件保存至/home/tmp目录)
[MySQL]
# cd /home/tmp (进入压缩包 ......

Linux常用命令集合

1. man 对你熟悉或不熟悉的命令提供帮助解释
eg:man ls 就可以查看ls相关的用法
注:按q键或者ctrl+c退出,在linux下可以使用ctrl+c终止当前程序运行。
2. ls 查看目录或者文件的属*,列举出任一目录下面的文件
eg: ls /usr/man
ls -l
a.d表示目录(directory),如果是一个”-”表示是文件,如果是l则表示是 ......

Linux下VNCSERVER的使用介绍

telnet与ssh只是基于字符界面的远程控制,如果想要对linux服务器时行桌面的远程控制的话,我们可以安
装vnc-server服务来实现
1. 查看Vnc安装版本。
ps aux|grep Xvnc
2.设置VNC桌面
2.1
我们要为有权可以登录的用户设置登录桌面,修改配置文件/etc/sysconfig/vncservers :
VNCSERVERS="2:username"
VNCSERVERARGS ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号