C/C++中near和far的区别
关键字near和far受目标计算机体系结构的影响。目前编程中使用不多。
near关键字创建一个指向可寻址内存低端部分的目标指针。这些指针占用内存的单一字节,并且他们能够指向的内存单元被限制到256个位置,通常是在0x0000~0x00ff范围中。
int near * ptr;
far关键字创建一个能够指向内存中任何数据的指针:
char far * ptr;
near (近)指针:16位段内偏移地址
far(远)指针:16位段地址+16位段内偏移地址
huge(巨)指针:32位规格化的具有唯一性的内存地址
C语言的存贮属性由六种编译模式决定(参见TC集成环境菜单中的option->compiler->model选项),默认的编译模式为small, 在该编译模式下,指针的默认属性为near。
补充:near指针是16位指针,依赖一个段地址寄存器,指针变量就是位移量,利用 段地址寄存器+指针 来寻址,所以有64K之限制。
&n ......
C/C++中near和far的区别
关键字near和far受目标计算机体系结构的影响。目前编程中使用不多。
near关键字创建一个指向可寻址内存低端部分的目标指针。这些指针占用内存的单一字节,并且他们能够指向的内存单元被限制到256个位置,通常是在0x0000~0x00ff范围中。
int near * ptr;
far关键字创建一个能够指向内存中任何数据的指针:
char far * ptr;
near (近)指针:16位段内偏移地址
far(远)指针:16位段地址+16位段内偏移地址
huge(巨)指针:32位规格化的具有唯一性的内存地址
C语言的存贮属性由六种编译模式决定(参见TC集成环境菜单中的option->compiler->model选项),默认的编译模式为small, 在该编译模式下,指针的默认属性为near。
补充:near指针是16位指针,依赖一个段地址寄存器,指针变量就是位移量,利用 段地址寄存器+指针 来寻址,所以有64K之限制。
&n ......
C 和 C++ 字符串字面量(String Literal)既有相同之处,又有一些区别。了解这些内容对于加深字符串字面量以及相关一些概念的理解、澄清一些常见的概念误区不无助益。本文以普通字符串字面量 "hello" 为例总结说明如下。
相同点:
字符串字面量是对象
C/C++ 中的对象(Object)指的是一块存储区。字符串字面量是不需要创建过程就可使用的对象,所以它既没有变量那样的声明或者定义(字符串字面量是无名对象),也不需要象动态分配的对象那样进行动态分配。由于这个原因,用来限定变量的类型限定符(如 const、volatile)以及存储类别指示符(如 extern、static、auto、register)不能用在修饰字符串字面量上。
数组类型
字符串字面量是数组类型的对象,因而具有数组的一切特点。关于这一点在下面还会进一步说明。
静态存储期
C/C++ 中对象的生存期按照其存储性质可分为三类:静态存储期(static storage duration)、自动存储期(automatic storage duration)以及动态存储期(dynamic storage duration)。相应地,对象可根据存储期性质分为静态对象、自动对象和动态对象三种。
字符串字面量是静态对象,所以在程序运行期间会一直存在。
字符串字面量是左值,而且是 ......
C 和 C++ 字符串字面量(String Literal)既有相同之处,又有一些区别。了解这些内容对于加深字符串字面量以及相关一些概念的理解、澄清一些常见的概念误区不无助益。本文以普通字符串字面量 "hello" 为例总结说明如下。
相同点:
字符串字面量是对象
C/C++ 中的对象(Object)指的是一块存储区。字符串字面量是不需要创建过程就可使用的对象,所以它既没有变量那样的声明或者定义(字符串字面量是无名对象),也不需要象动态分配的对象那样进行动态分配。由于这个原因,用来限定变量的类型限定符(如 const、volatile)以及存储类别指示符(如 extern、static、auto、register)不能用在修饰字符串字面量上。
数组类型
字符串字面量是数组类型的对象,因而具有数组的一切特点。关于这一点在下面还会进一步说明。
静态存储期
C/C++ 中对象的生存期按照其存储性质可分为三类:静态存储期(static storage duration)、自动存储期(automatic storage duration)以及动态存储期(dynamic storage duration)。相应地,对象可根据存储期性质分为静态对象、自动对象和动态对象三种。
字符串字面量是静态对象,所以在程序运行期间会一直存在。
字符串字面量是左值,而且是 ......
指针是c和c++中的难点和重点。我只精通dos下的basic。c语言的其它各种特性,在basic中都有类似的东西。只有指针,是baisc所不具备的。指针是c的灵魂。
我不想重复大多数书上说得很清楚的东西,我只是把我看过的书中说得不清楚或没有说,而我又觉得我理解得有点道理的东西写出来。我的目的是:
1。通过写这些东西,把我脑袋中关于c的模糊的知识清晰化。
2。给初学者们一点提示。
3。赚几个经验值。(因为贴这些东西没有灌水之嫌啊)
第一章。指针的概念
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。
要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。
先声明几个指针放着做例子:
例一:
(1)int *ptr;
(2)char *ptr;
(3)int **ptr;
(4)int (*ptr)[3];
(5)int *(*ptr)[4];
如果看不懂后几个例子的话,请参阅我前段时间贴出的文?lt;<如何理解c和c
++的复杂类型声明>>。
1。指针的类型。
从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针 ......
1、从N个数中选出n个最大的数,写出思路和实现。
《编程之美》上有讲这个算法的设计与思路。
我这里简单写几个思路:
(a)如果N能在主存中一次读入,则先进行快排,然后再取前n个数。算法复杂度:O(NlogN).
(b)如果N非常大,假设不能一次读入内存,并且n不是很大的话,可以维护一个n个元素的有序队列,队列中都是每个元素都是已经读入的数中的
前n大的数字。每读入一个数就跟这n个已排序的队列进行比较,如果大于这n个元素中最小的那个元素,则替换之,由此继续,直到读取完毕,得到的有序队列就是n个最大的数。算法复杂度:O(N * n)
(c)假如对于重复出现的数只计一次,那么可以使用位向量的方法,一次读入N个数,如果某数出现则把对应的位置位。读取完毕后输出最高位的n个数。关于位向量的方法详见《编程珠玑》。该算法的复杂度是O(N)
(d)假如N能够存入主存。因为我们只关心前n个数,所以,可以借鉴快速排序的思想,随机取一个数作为枢纽元,大于枢纽的数存入一个集合A,小于枢纽的数存入一个集合B,如果集合A的元素数目大于n,则再次分割集合A。如果集合A的元素小于n,则前n大元素是 A的元素 + B中最大的(n - A的元素个数)。该算法如果枢纽元选择的好的话, ......
1、从N个数中选出n个最大的数,写出思路和实现。
《编程之美》上有讲这个算法的设计与思路。
我这里简单写几个思路:
(a)如果N能在主存中一次读入,则先进行快排,然后再取前n个数。算法复杂度:O(NlogN).
(b)如果N非常大,假设不能一次读入内存,并且n不是很大的话,可以维护一个n个元素的有序队列,队列中都是每个元素都是已经读入的数中的
前n大的数字。每读入一个数就跟这n个已排序的队列进行比较,如果大于这n个元素中最小的那个元素,则替换之,由此继续,直到读取完毕,得到的有序队列就是n个最大的数。算法复杂度:O(N * n)
(c)假如对于重复出现的数只计一次,那么可以使用位向量的方法,一次读入N个数,如果某数出现则把对应的位置位。读取完毕后输出最高位的n个数。关于位向量的方法详见《编程珠玑》。该算法的复杂度是O(N)
(d)假如N能够存入主存。因为我们只关心前n个数,所以,可以借鉴快速排序的思想,随机取一个数作为枢纽元,大于枢纽的数存入一个集合A,小于枢纽的数存入一个集合B,如果集合A的元素数目大于n,则再次分割集合A。如果集合A的元素小于n,则前n大元素是 A的元素 + B中最大的(n - A的元素个数)。该算法如果枢纽元选择的好的话, ......
B/S为何难于提供好的用户交互体验?
最大问题有几个:
(1)无状态的HTTP协议
WINDOWS窗体间能够通过内存直接交换信息,但作为B/S架构通讯基础协议的HTTP是无状态的。
如果将浏览器看成是客人,Web服务器看成是旅馆,在HTTP协议的管理之下,会出现这种情况:不管某客人来访多少次,Web服务器都将其视为第一次的访客。这样一来,客人每次都得带齐身份证件供旅馆工作人员“验明正身”。
HTTP协议的无状态,导致Web服务器的“六亲不认”,这固然能添加Web服务器的吞吐量,却给应用系统的开发带来了麻烦。因为应用系统中常常有许多业务处理流程,天生就是信息流转的,即原始数据从一端进去,从另一端出来时应该已经过某些处理,怎可想象整个业务流程中的信息会流失?于是,在HTTP各请求间共享信息就成了件麻烦事,这就是HTTP请求的“状态保持”问题。每个B/S系统都必须解决这个问题。微软想了一些“歪招”,比如充分利用HTML网页的中隐藏域,再在Web服务器上做些手脚,于是ASP.NET拥有了一套在各个HTTP请求之间维持状态的技术:SESSION,COOKIE,VIEWSTATE,PROFILE,APPLICATION。
然而问题并没有完全解 ......
B/S为何难于提供好的用户交互体验?
最大问题有几个:
(1)无状态的HTTP协议
WINDOWS窗体间能够通过内存直接交换信息,但作为B/S架构通讯基础协议的HTTP是无状态的。
如果将浏览器看成是客人,Web服务器看成是旅馆,在HTTP协议的管理之下,会出现这种情况:不管某客人来访多少次,Web服务器都将其视为第一次的访客。这样一来,客人每次都得带齐身份证件供旅馆工作人员“验明正身”。
HTTP协议的无状态,导致Web服务器的“六亲不认”,这固然能添加Web服务器的吞吐量,却给应用系统的开发带来了麻烦。因为应用系统中常常有许多业务处理流程,天生就是信息流转的,即原始数据从一端进去,从另一端出来时应该已经过某些处理,怎可想象整个业务流程中的信息会流失?于是,在HTTP各请求间共享信息就成了件麻烦事,这就是HTTP请求的“状态保持”问题。每个B/S系统都必须解决这个问题。微软想了一些“歪招”,比如充分利用HTML网页的中隐藏域,再在Web服务器上做些手脚,于是ASP.NET拥有了一套在各个HTTP请求之间维持状态的技术:SESSION,COOKIE,VIEWSTATE,PROFILE,APPLICATION。
然而问题并没有完全解 ......
在VC6中使用c API方式连接MySQL数据库
一、环境配置
1、在MySql的官方网站下载mysql-connector-c-noinstall,并将解压后的bin和include文件夹拷贝到Mysql的安装目录
2、设置VC6环境,在vc工具-选项-目录,加入刚才的Include文件夹的路径,例如:C:\Program Files\MySQL\MySQL Server 5.1\include
二、工程设置
3、将lib文件夹中的linmysql.lib和libmysql.dll拷贝到工程目录下,工程-设置-连接,在对象/库模块中添加wsock32.lib和libmysql.lib
三、示例
4、先导入测试程序所需的环境,将以下SQL语句保存为sql脚本文件并导入
#VC6通过API连接Mysql测试环境
#创建数据库
drop database if exists `test`; #如果有这个数据库,则移除它 create database test; #创建数据库
use test; #使用数据库
#创建表User,保存会员属性
drop table if exists `User`;
create table User (
id int(11) not null auto_increment,
name varchar(2 ......
在VC6中使用c API方式连接MySQL数据库
一、环境配置
1、在MySql的官方网站下载mysql-connector-c-noinstall,并将解压后的bin和include文件夹拷贝到Mysql的安装目录
2、设置VC6环境,在vc工具-选项-目录,加入刚才的Include文件夹的路径,例如:C:\Program Files\MySQL\MySQL Server 5.1\include
二、工程设置
3、将lib文件夹中的linmysql.lib和libmysql.dll拷贝到工程目录下,工程-设置-连接,在对象/库模块中添加wsock32.lib和libmysql.lib
三、示例
4、先导入测试程序所需的环境,将以下SQL语句保存为sql脚本文件并导入
#VC6通过API连接Mysql测试环境
#创建数据库
drop database if exists `test`; #如果有这个数据库,则移除它 create database test; #创建数据库
use test; #使用数据库
#创建表User,保存会员属性
drop table if exists `User`;
create table User (
id int(11) not null auto_increment,
name varchar(2 ......