【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++ development with the Eclipse Platform
Pawel Leszek
摘要:通过本文你将获得如何在Eclipse平台上开发C/C++项目的总体认识。虽然Eclipse主要被用来开发Java项目,但它的框架使得它很容易实现对其他开发语言的支持。在这篇文章里,你将学会如何使用CDT(C/C++ Development Toolkit),一个在Eclipse平台上最 ......
一、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 ......
c++库文件中的符号的含义:
所有的符号都是以下划线加上大写字母也就是"_Z"开头,对于在 类里或者命名空间中的符号,后面紧跟"N",然后是各个命名空间和类的名字,每个名字前是名字字符串的长度,随后是大写字母"E",对于一个函数,他的参数列表都在E后面, ......
信号本质
信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。
信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程 ......
php 通用的调用 so的方法是使用dl()函数,但是在php5.3之后不再支持这种方法,仅支持静态调用,使用dl() 动态调用的方法见:
引用页1: http://tech.idv2.com/2007/07/06/use-local-so-in-php/
感谢原作者提供的清晰明了的方法,但是我在5.3.1版本i中没有通过,于是我找到了页面:
  ......