当前位置:文档之家› c++学习笔记

c++学习笔记

c++学习笔记
c++学习笔记

1 各种类型的长度

# include

using namespace std;

using std::cout;

using std::cin;

void main()

{

char c='c';

short s = 80;

int i = 12;

long l = 12;

double d = 0;

long double lb =12;

cout << "sizeof the char " << sizeof(c) << endl;

cout << "sizeof the short int " << sizeof(s) << endl;

cout << "sizeof the int " << sizeof(i) << endl;

cout << "sizeof the long " << sizeof(l) << endl;

cout << "sizeof the double " << sizeof(d) << endl;

cout << "sizeof the long double " << sizeof(lb) << endl; }

2 将位数高的类型赋给位数低的,取余。

# include

using namespace std;

using std::cout;

using std::cin;

void main()

{

int a = 100000;

unsigned short us = a ;

cout << us << endl;

}

3 转义字符

换行符:\n 退格符:\b 回车符:\r (回到当前行的最前面)

报警符: \a 反斜线:\\ 双引号:\”水平制表符:\t(输出的内容是八个空格)

\40 空格符\0 空字符\12 换行符号

4字符串字面值的连接:两个相邻仅由空格,制表符或换行符分开的字符串字面值,可连接成一个新字符串字面值。

std::cout<<”hello”

“world”

<< endl;

5 多行字面值:反斜线符号必须是该行的尾字符,不允许其后面有注释或空格。后续行行首的任何字符和制表符都是字符串字面值的一部分。

cout<<"a muti-line \

hello\

world"

<

6 内置类型的变量

在函数体外定义的变量都初始化为0,在函数体内定义的变量不进行初始化。

std::string gloal_str;

int gloal_int;

int mail()

{

std::string local_str;

int local_int;

}

gloal_str, local_str初始化为空字符串,gloal_int初始化为0,local_int没有初始化。

7 声明和定义

(1)声明和定义的区别:

变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中变量有且仅有一次定义。

声明用于向程序表明变量的类型和名字。定义也是声明:当定义变量时我们声明了它的类型和名字。

8 常量

常量在定义后就不能被修改,所以定义时必须初始化。

# include

using namespace std;

using std::cout;

using std::cin;

int GetSize()

{

return 60;

}

void main()

{

const int i =GetSize();

cout << i << endl;

}

6 引用

非const引用只能绑定到与该引用同类型的对象。const引用则可以绑定到不同但相关的类型的对象或绑定到右值。

例如:

int i =42;

const int &r = 42;

const int &r2 = r+i;

同样的初始化对于非const引用却是不合法的。

double dval = 3.14;

const int &ri = dval;

编译器会把这些代码转换成以下编码:

int temp =dval;

const int &ri = temp;

7 typedef

typedef用来定义类型的同义词。typeof以关键字typedef开始,后面是数据类型和标识符。标识符或类型名并没有引入新的类型,而只是现有数据类型的同义词。

typeof 的目的:

(1) 为了隐藏特定类型的实现,强调使用类型的目的。

(2)简化复杂的类型定义,使其更易理解。

(3)允许一种类型用于多个目的,同时使得每次使用该类型的目的明确。

例如:typedef double wages;

8 枚举

(1)枚举的定义包括关键字enum,其后是一个可选的枚举类型名,和一个花括号括起来,用逗号分开的枚举成员列表。

enum open_modes {input,output,append};

默认地,第一个枚举成员赋值为0,后面的每个枚举成员赋的值比前面的大1

(2)可以为一个或多个枚举成员提供初始值,用来初始化枚举成员的值必须是一个常量表达式。

(3)每个enum定义了一种新的类型。枚举类型的对象的初始化或赋值,只能通过其枚举成员或同一枚举类型的其它对象里进行。

例如:

enum open_mode {input=2,output,append};

open_mode oo = 3; //error

open_mode ss = input;

open_mode tt = polygon; //error

open_mode hh = ss;

9 用getline读取整行文本

getline(cin,line),getline函数将istream参数作为返回值,line不含换行符,返回时丢弃换行符。

10 string对象的操作

s.empty(): 如果s为空串,则返回true,否则返回false

s.size():返回s 中字符的个数

tolower(c):如果是大写字母,则返回其小写字母形式

toupper(c): 如果是小写字母,则返回其大写字母形式

11 string对象的定义和初始化

string s1:默认构造函数,s1为空串,如果是int类型则为0

string s2(s1):将s2初始化为s1的一个副本

string s3(“value”):将s3初始化为一个字符串字面值副本

string s4(n,?c?):将s4初始化为字符?c?的n个副本

12 vector 的构造函数

Vectorv1;

Vectorv2(n1);

Vectorv3(n,i);

Vectorv4(n);

v.empty();

v.size();

v_push_back(t);

v[n]

for(vector::size_type ix=0;ix

{

Ivec[ix]=0;

}

13 迭代器

begin和end操作,每种容器都定义了一对命名为begin和end函数,用于返回迭代器。例如:vector::iterator iter = ivec.begin();如果iter不为空,iter即指该元素为ivec[0]

由end操作返回的迭代器指向vector的“末端元素的下一个”,如果vector为空,begin和end返回的迭代器相同。

例如:

for(vector::iterator iter = vec.begin();iter

{

*iter = 0;

}

14解引用操作符

*iter = 0 返回迭代器所指向的元素。

15 迭代器的算术操作

iter + n 或者iter –n: n必须是vector的size_type 或difference_type 类型

iter1-iter2 是differnce_type类型的值

vector::iterator mid = (vi.begin() + vi.end())/2 是错误的

应该改为:vector::iterator mid = vv.begin() + (vv.end()-vv.begin()) /2;

15bitset

bitset b :有n位,每位为0

bitsetb(u):b是unsigned long的u的一个副本

bitsetb(s):b是string对象s中含有的位串的副本

bitsetb(s,pos,n):b 是s中从位置pos开始的n个位的副本

例如:bitset<16> bitvec(0xffff);

string str=”1111111111100000000000”;

bitset<32>bitvec(str);

bitset<32> bitvec (str,5,4);

bitset<32)bitvec(str,str.size()-4);

b.any():判断是否存在置为1的二进制位

b.none():判断不存在置为1的二进制位

b.count():置为1的二进制位的个数

b.size():b中二进制位的个数

b[pos]:b 中在pos处的二进制位

b.set()

b.set(pos)

b.reset()

b.reset(pos)

b.flip()

b.flip(pos)

b.to_ulong()

16 数组

(1)数组的定义和初始化:数组的维数必须用值大于等于1的常量表达式定义。

(2)显示初始化数组元素,显示初始化数组可以不指定数组的维数值。如果指定了维数,那么初始化提供的元素个数不能超过维数值。如果维数大于列出的元素初值个数,则只能初始化前面的元素个数,剩下的其它元素,若是内置类型则初始化为0。若是类类型则调用该类的默认构造函数进行初始化。

int ia[3]={1,2,3};

(3)字符数组可以用一组由花括号括起来,逗号隔开的字符字面值进行初始化,也可以

用一个字符串字面值进行初始化。如果是用字符串字面值来初始化创建的新数组时,将在新数组中加入空字符。

例如:char cal[] = {…c?,?+?,?+?};

char ca2[]={…c?,?+?,?+?,?\0?}

char ca3[]={“c++”};

cal 的维数为3,ca2和ca3的维数为4

(4)不允许数组直接复制和赋值

int ia[] ={1,2,3};

int ia1[]{ia};

ia1 = ia;

(4)数组下标:size_t

for(size_t ix=0;ix<10;ix++)

{

cout << ia[ix];

}

(5)数组的初始化

.在函数体外定义的内置数组,其元素均初始化为0。

.在函数体内定义的内置数组,其元素均无初始化。

.不管数组在哪里定义,如果其元素为类类型,则自动调用该类的默认构造函数进行初始化;如果该类没有默认构造函数,则必须为该数组的元素提供显示初始化。(6)指针初始化和赋值操作的约束

a0值常量表达式,在编译时可获得0值的整型const对象或字面值常量0。

b 类型匹配的对象的地址。

c 另一对象之后的下一地址。

d 同类型的另一个有效地址。

int *pi = NULL;编译时自动被数值0替换。

void*指针:表明该指针与一地址值相关。但不清楚存储在此地址上的对象的类型。(7)指针和引用的比较

第一个区别在于引用总是指向某个对象,定义引用时没有初始化时错误的。第二个重要区别则是赋值行为的差异:给引用赋值修改的是该引用所关联的对象的值,而并不是使引用与另一个对象关联。引用一经初始化,就始终指向同一特定对象。

(8)指针操作

# include

#include

#include

using namespace std;

using std::vector;

void main()

{

string s = "Hello world";

string *p = &s;

cout << *p << endl;

}

int ia[] = {0,2,4,6,8};

int *ip =ia;

ip = &ia[4];

16初始化

没有默认构造函数的类类型的成员,以及const或引用类型的成员,都必须在构造函数初始化列表中进行初始化。在开始执行构造函数的函数体之前,要完成初始化。初始化const或引用类型数据成员的唯一机会是在构造函数初始化列表中。

每个成员在构造函数初始化列表中只能指定一次。成员被初始化的次序是定义成员的次序,而不是初始化列表中的顺序。

17类的static成员

可以通过作用域操作符从类直接调用static成员,或者通过对象,引用或指向该类类型对象的指针间接调用。

18使用类的static成员的优点

(1)static成员的名字是在类的作用域中,因此可以避免与其他类的成员或全局对象名字冲突。

(2)可以实施封装。static成员可以是私有成员,而全局对象不可以。

(3)通过阅读程序容易看出static成员是与特定类关联的。

19 static定义

static数据成员必须在类定义体的外部定义。不像普通数据成员,static成员不是通过类构造函数进行初始化,而是应该在定义时进行初始化。

19特殊的整型const static成员

#include

using std::cout;

using std::endl;

class Account

{

public:

static const double interestRate;

};

const double Account::interestRate=0;

void main()

{

cout << Account::interestRate << endl;

}

20基类成员函数

成员默认为非虚函数,除了构造函数之外,任意非static成员函数都可以是虚函数。21Public,private和protected

用户代码可以访问public成员而不能访问private成员,private成员只能由基类的成员和友元访问。派生类可以访问public成员而不能访问private成员。Protected成员是private和public的混合。

像private成员一样,protected成员不能被类的用户访问

像public成员一样,protected成员可被该类的派生类访问

22派生类和虚函数

如果派生类没有重定义某个虚函数,则使用基类中定义的版本。派生类必须对要重定义的每个继承成员进行声明。必须与基类中定义方式完全匹配。但有一个例外:返回对基类型的引用(或指针)的虚函数。派生类中的虚函数可以返回基类函数所返回类型的派生类的引用(或指针)。

#include

using std::cout;

using std::endl;

class Account

{

public:

virtual int net_price(int n)

{

return n * price;

}

int price;

};

class bulk:public Account

{

public:

bulk(int pp)

{

price = pp;

}

virtual int net_price(int n)

{

return price;

}

};

int main()

{

bulk myBulk(5);

cout << https://www.doczj.com/doc/ac1535153.html,_price(10) << endl;

return 0;

}

23派生类对象包含基类对象作为对象

派生类对象由多个部分组成:派生类本身定义的成员加上由基类成员组成的子对象。

基类类型的引用或指针可以引用基类类型对象,也可以引用派生类型对象。无论实际对象具有哪种类型,编译器都将它作为基类类型对象。派生类对象当作基类对象是安全的,因为每个派生类对象都拥有基类子对象。

例如:

#include

using std::cout;

using std::endl;

class Account

{

public:

virtual int net_price(int n)

{

return n;

}

int price;

};

class Bulk:public Account

{

public:

Bulk(int pp)

{

price = pp;

}

virtual int net_price(int n)

{

return n*price;

}

};

void print_price(Account &account)

{

cout << https://www.doczj.com/doc/ac1535153.html,_price(10) << endl;

}

int main()

{

Account account;

Bulk myBulk(5);

Account* acc = &myBulk;

print_price(account);

print_price(myBulk);

print_price(*acc);

return 0;

}

24覆盖虚函数机制

在某些情况下,希望覆盖虚函数并强制函数调用使用虚函数的特定版本,这时可以使用作用域操作符。

例如:

Item_base *baseP = &derived;

double d = baseP-> Item_base::net_price(30);

这段代码强制将net_price调用确定为Item_base中定义的版本。

25公有继承,私有继承,受保护继承

公有继承:基类的public成员为派生类的public成员,基类的protected成员为派生类的protected成员

私有继承:基类所有成员在派生类中为private成员。

受保护继承:基类的所有成员在派生类中为protected成员。

类和数据抽象

1 类定义了数据成员和函数成员:数据成员用于存储与该类类型相关联的状态,而函数成员负责执行赋予数据意义的操作。通过类将实现和接口分离。

2 每个类可以没有成员,也可以定义多个成员,成员可以是数据,函数或类型别名。一个类可以包含若干公有的,私有的和受保护的部分。所有成员必须在类的内部声明,一旦类定义完成后,就不能增加成员了。

3 构造函数和成员函数

创建一个类类型的对象时,编译器会自动使用一个构造函数来初始化该对象。构造函数和类同名的成员函数,用于给每个数据成员设置适当的初始值。

4 在类外部定义的成员函数必须指明它们是在类的作用域中。

5 const成员不能改变其所操作的对象的数据成员。const必须同时出现在声明和定义中。例如:double avg_price () const;

6 封装:是一项将低层次的元素组合起来形成新的,高层次实体的技术。程序的所有部分都可以访问带有public标号的成员。使用类的代码不可以访问带有private标号的成员。private 封装了类型的实现细节。

7 class 和struct的区别

(1)class是引用类型,struct是值类型,class是在堆中分配空间,struct实在栈中分配空间。class的赋值是引用.

(2) 类可以继承,结构体不能继承。

(3) 类有默认的构造函数,结构体没有。

(4)类有析构函数,结构体没有。

(5) 类有protected标号,结构体没有。

8 成员函数可被重载

函数重载:两个重载成员的形参数量和类型不能完全相同。

9 inline 在类类别声明成员函数是必需的,而定义成员函数则是可选的。在类内部定义的函数默认为inline。可以在类定义体内部指定一个成员为inline,作为其声明的一部分,也可以在类定义体外部的函数定义上指定inline。在声明和定义处指定inline都是合法的。

10 类声明和定义

Class Screen是类的声明,有时候称为前向声明。在声明之后,定义之前类Screen是一个不完全类型。在创建类的对象之前必须是完整地定义该类。必须定义类而不只是声明类。定义一个类时,也就定义了一个类型,一旦定义了类,就可以定义该类型的对象,定义对象时将为其分配存储空间,但定义类型时不进行存储分配。

例如:定义一个类

class sales_item

{

public:

private:

std::string isbn;

unsigned units_sold;

double revenue;

}

定义了一个新的类型,但没有进行存储分配,当定义一个对象sales_item item;编译器分配了足以容纳一个sales_item对象的存储空间。

11 this 指针

在普通的非const成员函数中,this的类型是一个指向类类型的const指针。可以改变this 所指向的值,但不能改变this所保存的地址。在const成员函数中,this的类型是一个指向const类类型对象的const指针,既不能改变this所指向的对象,也不能改变this所保存的地址。const成员函数是不允许改变成员变量的值。

例如:const Screen & display() const

{

return *this;

}

12 error 和exception的区别

Error表示系统级的错误和程序不必处理的异常

Exception表示需要捕捉或者需要程序进行处理的异常

13 怎么设置ORACLE的用户最大连接数

在目录oracle\admin\xxx\pfile\init.ora下找到processes=zzz,修改processes的值

14 三次握手

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发

送一个SYN包(syn=k);

第三次握手:向服务器发送确认包ACK(ack=k+1),此包发送完毕,完成三次握手。客户端与服务器开始传送数据

(1)SYN:同步标志

同步序列编号(Synchronize Sequence Numbers)栏有效。

(2)ACK:确认标志

15 类的作用域

两个类具有完全相同的成员列表,它们也是不同的类型。每个类的成员不同于其他类的成员。

26使用类的成员

在类作用域中,成员只能通过对象或指针分别使用成员访问操作符. 或->来访问。这些操作符左边的操作数分别是一个类对象或指向类对象的指针。

Class obj;

Class *ptr = &obj;

ptr->member

obj.member

27可变数据成员

const成员函数可以改变mutable成员

class Screen

{

public:

void do_display () const

{

a++;

}

private:

Mutable int a;

}

28形参表和函数体处于类作用域中,函数返回类型不一定在类作用域中。函数返回类型不一定在类作用域中。

char Screen::get(index r,index c) const

{

index row = r * width;

return contents[row+c];

}

Screen::index Screen::get() const

{

return cursor;

}

29inline成员函数

在类内部定义的成员函数,将自动作为inline函数。也可以将成员函数显示的声明为inline。在声明和定义处指定inline都是合法的。

30类成员声明

typedef double money

class Account

{

}

31继承和静态:

整个继承层次只有一个这样的成员,只有一个实例。

32四种存储区:栈,堆,全局数据区,代码区

对于全局对象,其构造函数就先被执行(比程序进入点更早),程序即将结束前其析构函数被执行。

对于局部对象,当对象诞生时,其构造函数被执行;当程序流程将离开该对象的存活范围时,其析构函数被执行。

对于静态对象,当对象诞生时其构造函数被执行,当程序将结束时其析构函数才被执行,但比全局对象的析构函数早一步执行。

对于以new方式产生出来的局部对象,当对象诞生时其构造函数被执行。析构函数则在对象被delete时执行。

33撤销动态创建的对象

动态创建的对象用完后,程序员必须显式地将该对象占用的内存返回给自由存储区。

new 和delete malloc和free.

C语言入门手册

●C语言入门手册 ●这里不是教你什么知识,而是给你澄清一些资料,只给对编程一窍不通的或 者刚入门的人看。如果你尚未学习或者才学习不够一天,一定要看这手册,这份手册已经讲述的知识,我们不会在版面给予回答,此手册我会尽量保持准确,但如有不正确,请指正,我也会不断更新此手册 ●Q:什么是C? ●A:一门面向过程的计算机语言,发明至今已经差不多有三十年历史,由于 它相对其他高级语言高效,运行效率又比较接近低级语言,所以至今仍得到广泛的引用,无论你用windows还是linux,你现在看到东西的底层都是用C 写的,而大部分的网络协议都是用C实现的,画面最漂亮的游戏用C实现的,工业控制程序也是用C实现的。C不是万能,也不是垃圾,只是一门某些方面适用,某些方面不适用的语言 ●Q:什么是C++? ●A:一门面向对象的计算机语言,发明至今已经有二十多年了。由于面向对 象编程对程序架构有较好的帮助,因为比较适合构建大型的系统(当然,学术界对此存在争论),但无论如何,C++由于和C一样接近底层,而且又面向对象,所以也得到广泛的使用。C++不是万能,也不是垃圾,只是一门某些方面适用,某些方面不适用的语言,不要向某一个笨蛋一样认为c + 类== c++ ●Q:TC,VC,BC,BCB是什么?有什么区别?谁好? ●A:它们都是开发C/C++的开发环境,是软件。它们是不同时期由不同公司 发行的软件Turbo C ,Borland公司在八十年代末期发行的C语言的开发环境Turbo C++,Borland公司在八十年代末九十年代初发行的C++语言的开发环境Visual C++,Microsoft公司在九十年代至今发行的C/C++开发环境Borland C++,Borland公司在九十年代中发行的C/C++开发环境Borlan C++ Builder,Borland公司在九十年代后期至今开发的C/C++开发环境,与其他开发环境不用的是它属于快速应用程序开发(RAD),可以让你不写代码就能建立程序,当然它的运行效率见仁见智没有什么是万能的,不同场合用不同的东西而且C/C++还有很多开发环境,譬如gcc,watcom C++,Dev C/C++ ●Q:什么语言/开发环境最好? ●A:没有最好,只有最适用某方面 ●Q:需要什么基础才能学C/C++ ●A:至少学过幼儿园语文,小学英语,小学数学才能学,所以先确定你拥有 小学学历,然后就能学了至于学习C++前是否需要学C,C++的发明者认为不用,但见仁见智 ●Q:如何更有效的学习C/C++? ●A:不断的看书+实践,先把书上的练习题做完再说,务必记住不要钻牛角尖, 很多初学者经常犯这样的错误,不要盲目的提出问题,现在看来是问题其实在以后的实践和学习中都会慢慢理解的,任何东西都需要一个过程。万万不可浮躁。 ●Q:TC能开发windows软件吗? ●A:不能,因为不同系统,生成的程序格式不同 ●Q:要多久才能成为高手? ●A:当你不再问这个问题的时候,总是会有比你技术高的人,也许你在你生 活的环境中没有,的确可以说你在这个小范围是高手,但是再在别的地方一定会有比你厉害的人只是你没有接触到而已 ●Q:学C/C++有什么用? ●A:先想想你为了什么而学,想不到就不要学 ●Q:学完C/C++又能怎样 ●A:没怎样,学是为了使用服务的,只证明你会一门语言,但不等于你会开 发软件。就像学外语,为的是跟外国人交际,但如果你不懂交际,即使精通英语,法语,日语,朝鲜语,阿拉伯语,西班牙语……还是不会跟人交际。 你应该继续学习软件开发的知识,包括数据结构,算法,软件工程等等,还有要提高数学水平,譬如微积分,离散数学,矩阵,概率,统计,数值分析。 ●Q:我有很多不懂,怎么办? ●A:查帮助,搜索引擎。最著名的帮助文档叫MSDN,我们主要使用其光盘发 行版,D版可以从电脑城买,正版可以去微软订购,如果没有光盘可以去https://www.doczj.com/doc/ac1535153.html,查询。 ●二、开始学习了 ●Q:我在TC看到缺少cos.obj的提示,为什么?

【G】C学习笔记c重点整理

C#学习笔记 1.C#具有所有面向对象的语言的所有特性:封装,继承,多态。在C#系统中,所有的类型都可以看作一个对象。 C#只允许单继承,即一个类不会有多个基类,C#不会有全局函数,不会有全局变量,不会有全局常数,所有的一切只能封装在一个类中。 https://www.doczj.com/doc/ac1535153.html,包括四个部分:vos类型系统。元数据;公用语言规范;虚拟执行系统。 https://www.doczj.com/doc/ac1535153.html,ing system表示导入名称空间。 让我们从第一个程序开始就记得:每个东西都必须属于一个类,类里面的方法总是为我们完成某件工作的。 在C#中,程序的执行总是从main()方法开始的,一个程序中不允许出现两个或两个以上的main()方法。对于习惯学C控制台程序的读者,必须要牢记:main()方法必须包含在一个类中。 利用string可以方便地对字符串进行连接或剪切。例:string s=”good”+”morning”;char x=s[3]字符串可以通过下标进行索引,得到一个字符。 6.我们可以用//进行单行标注,/* */进行多行标注。 在C和C++中,任何非0值都表示真,在C#中,任何非0值都不能代替true.在其它类型的整型值和布尔值之间不存在任何的转换,将整型转换成布尔型是不合法的。。 把一系列相关的变量组织成单一实体的过程称为生成结构的过程。这个单一实体的类型叫结构类型,每一个变量就是结构的成员。 9.结构类型包含的成员类型可以相同,也可以不同。我们甚至可以把一个结构类型当作另一个结构成员的类型。 枚举实际上是为一组在逻辑上密不可分的整数值提供便于记忆的符号。结构类型变量的值由各个成员的值组合而成。而枚举则不同,枚举类型的变量在某一时刻只能取枚举中某个元素的值。按照系统的设定,每个元素的类型都为整型。且第一个元素的值为0,后面的每个元素梯加1,也可以直接赋值。如把前面第一个元素的值设为1,后面的元素不用设,系统自动将后面元素的值递加1. C#中另一大数据类型是引有类型。其含义是该类型的变量不直接存储所包含的值,而是指向它所要存储的值。 也就是说引用类型存储实际数据引用值的地址。 类是面向对象编程的基本单位,是一种包含数据成员,函数成员和嵌套类型的数据结构。类和结构都包含了自己的成员,但它们的区别是:类是引用类型,而结构是值类型。 13.如果我们对某个类定义了一个变量,则我们就将它称为类的一个实例。 我们常用到的类:object类。这个类是其它所有类的基类,其它类型可以直接或间接地从object类中继承。因此,对一个object类的变量可以赋于任何类型的值。 代表?在声明代表时,只需要指定代表指向的原型的类型,它不能有返回值,也不能带有输出类型的参数。 如:delegate int Mydelegate().在使用的时候:Mydelegate d=new Mydelegate(p.instanceMethod).为什么不用delegate d=new Mydelegate(p.instanceMethod)呢?原因是delegate相当于class需要一个名字,class myclass{…}这个class的名字是myclass而且它包含有其它元素、常数或者函数,变量等。跟char a=a不同,它不包含有其它的元素,a就是一个变量。而myclass不是变量,它只一个名字。而myclass a=new myclass(); a才是变量,是类的一个实例。在这里,这个delegate的名字是Mydelegate,也并不是一个变量。 16.变量从用户角度来说,是存储信息的基本单元,从系统角度来说,变量就是计算机内存中的一个储存空间。 17.静态方法不能用类的实例来访问,必须用类名来访问。 数组的声明:数组的类型[数组的元素个数] 数组的名字;数组个数可以通过数组名加圆点加Length获得。如arr.Length表示arr数组的个数 19.在进行批量处理数据的时候,我们要用到数组.数组是一组类型相同的有序数据. 数组的初始化:int[] a1=new int[]{1,2,3};为什么是new int[],而不是new a1呢:因为int[]是类型,a1是int[]类型的一个实例.而且a1所代表的是{1,2,3},并不是函数.与delegate int Myclass();不同,Myclass()虽然是一个名字,但它可以代表一个函数,不是常数.原则:类型后面的名字如果可以代表函数,则这个名字就是一种类型.如果类型后面的名字代表常数,则这个名字不是一种类型,只是类型的一个变量.或者可以用另一种说法:如果名字后面含有(),{},[]则在赋值或设定实例的时候new后面要用该名字作为类型. 21.变量名不能与C#中的关键字名称相同。变量名不能与C#中库函数名称相同。 静态变量:static int a;一旦静态变量所属的类被加载,直到包含该类的程序运行结束前它将一直存在。

c语言基础

C#.NET是微软公司推出的一种类型安全、现代、简单、由C和C++衍生出来的面向对象的编程语言。掌握C#.NET的特点、程序结构、集成开发环境、C#语言的基本知识等,是利用好C#的前提。 本章内容 ?C#概述 ?C#语言基础 ?控制结构 ?数组 ?异常处理 1.1 C# 概述 C#是微软公司在2000年7月发布的一种全新的简单、安全、面向对象的程序设计语言。它是专门为.NET的应用而开发的语言。 https://www.doczj.com/doc/ac1535153.html,简介 1..NET定义 .NET技术是微软公司推出的一个全新概念,它代表了一个集合、一个环境和一个可以作为平台支持下一代Internet的可编程结构。.NET的目的就是将互联网作为新一代操作系统的基础,对互联网的设计思想进行扩展,使用户在任何地方、任何时间、利用任何设备都能访问所需要的信息、文件和程序。.NET平台包括.NET框架和.NET开发工具等部分。.NET框架(Framework)是整个开发平台的基础,包括公共语言运行库和.NET类库。.NET开发工具包括Visual https://www.doczj.com/doc/ac1535153.html,集成开发环境和.NET编程语言。.NET编程语言包括Visual Basic、Visual C++和新的Visual C#等用来创建运行在公共语言运行库(Common Language Run,CLR)上的应用程序。.NET框架结构如图1-1所示。

C#程序设计与案例教程 2 图1-1 .NET框架结构 2.公共语言运行库 公共语言运行库是.NET Framework 的基础。可以将运行库看成一个在执行时管理代码的代理,它提供核心服务(如内存管理、线程管理和远程处理),而且还强制实施严格的类型安全以及可确保安全性和可靠性的其他形式的代码准确性。事实上,代码管理的概念是运行库的基本原则。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。公共语言运行库管理内存、线程执行、代码执行、代码安全验证、编译以及其他系统服务。这些功能是在公共语言运行库上运行的托管代码所固有的。 3..NET框架类库 .NET Framework 类库是一个与公共语言运行库紧密集成的可重用的类型集合,是对Windows API封装的全新设计,它为开发人员提供了一个统一的、面向对象的、分层的和可扩展的庞大类库。该类库是面向对象的,使.NET Framework 类型易于使用,而且还减少了学习.NET Framework 的新功能所需要的时间。此外,第三方组件可与.NET Framework 中的类无缝集成。 例如,用.NET Framework 集合类实现一组可用于开发您自己的集合类的接口。您的集合类将与.NET Framework 中的类无缝地混合。 .NET Framework 类型使您能够完成一系列常见编程任务(包括字符串管理、数据收集、数据库连接以及文件访问等任务)。除这些常见任务之外,类库还包括支持多种专用开发方案的类型。例如,可使用.NET Framework 开发下列类型的应用程序和服务:?控制台应用程序。 ?Windows GUI应用程序(Windows 窗体)。 ?https://www.doczj.com/doc/ac1535153.html,应用程序。 ?XML Web services。 ?Windows 服务。 例如,Windows窗体类是一组综合性的可重用类型,它们大大简化了Windows GUI 的开发。如果要编写https://www.doczj.com/doc/ac1535153.html, Web窗体应用程序,可使用Web窗体类。 1.1.2什么是C# 1.C#及其特点 C#是微软公司在2000年7月发布的一种全新且简单、安全、面向对象的程序设计语

C学习笔记

C学习笔记 一、数据 1.数据类型分类 2.变量与常量 变量是程序中数据的存储空间的的抽象。 typedef是C语言的关键字,作用是为一种数据类型定义一个新名字。 3.存储类 存储类的属性:作用域(空间)、存储期(时间)、链接点 存储方式:静态存储、动态存储。是就时间属性来区分的。 静态存储方式和静态变量是不同的概念。静态变量是就链接属性来区分的,有静态 局部变量和静态全局变量。 二、字符串格式化输入输出 三、运算符、表达式和语句 1.运算符种类

4.运算符优先级 结合性:同一优先级的运算符,运算次序由结合方向所决定。 结合方向由右向左:单目运算符、条件运算符、赋值运算符 简单优先级比较:单目运算符> 算术运算符> 关系运算符> 逻辑运算符> 赋值运算符 5.运算符相关知识点总结 算术---: 数据类型的转换:自动转换和强制转换 赋值---:赋值表达式的值与被赋值变量的值得关系;

赋值中的类型转换:特别注意有符号与无符号之间的转换造成的BUG; 关系---:if( 1 == a ){……},防止错写成“=”造成的隐藏BUG; 0为假,非0为真; 逻辑---:逻辑量,表达式的逻辑值(0 or 1); sizeof---:s izeof(<类型或变量名>); 相同运算符的的嵌套造成的表达式的拓展; 6.表达式的概念 四、程序结构和控制语句 1.3种基本结构:顺序、分支、循环 循环:当型循环和直到循环 2.C语言控制语句 (1)条件判断语句(选择语句):if、switch if:单分支、双分支、多分支 if语句的嵌套方式; if-else的配对——就近配对; 复合语句被看做是单条语句,且{……}后无“;” switch语句中case标签并没有把语句列表分为几个部分,它只是确定语 句执行的入口点,default作用和普通标号一样; (2)循环语句:while和do-while、for、goto-标号 (3)转向语句:break、continue、goto continue:之后语句不再执行,结束本次循环,开始下次循环;

C语言入门教程____免费下载

51单片机C语言 相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。不过有些朋友可能只听说他叫单片机,他的全称是什么也许并不太清楚, 更不用说他的英文全称和简称了。单片机是一块在集成电路芯片上集成了一台有一定规模的微型计算机。简称为:单片微型计算机或单片机 (Single Chip Computer)。单片机的应用到处可见,应用领域广泛,主要应用在智能仪表、实时控制、通信、家电等方面。不过这一切都没 什么关系,因为我(当然也包括任何人)都是从不知道转变成知道的,再转变成精通的。现在我只想把我学习单片机的经历,详细地讲叙给大 家听听,可能有些大虾会笑话我,想:那么简单的东西还在这里卖弄。但是你错了,我只是把我个人学习的经历讲述一遍而已,仅仅对那些想 学习单片机,但又找不到好方法或者途径的朋友,提供一个帮助,使他们在学习过程中,尽量少走些弯路而已! 首先,你必须有学习单片机的热情,不是说今天去图书馆看了一个下午关于单片机的书,而明天玩上半天,后天就不知道那个本书在讲什 么东西了。还是先说说我吧,我从大二的第一个学期期末的时候才开始接触单片机,但在这之前,正如上面所说的:我知道有种芯片叫单片机, 但是具体长成什么样子,却一点也不知道!看到这里很多朋友一定会忍不住发笑。嘿嘿,你可千万别笑,有些大四毕业的人也同样不知道单片 机长成什么样子呢!而我对单片机的痴迷更是常人所不能想象的地步,大二的期末考试,我全放弃了复习,每当室友拿着书在埋头复习的时候, 我却捧着自己从图书馆借的单片机书在那看,虽然有很多不懂,但是我还是坚持了下来,当时我就想过,为了单片机值不值得我这样去付出, 或许这也是在一些三流学校的好处吧,考试挂科后,明年开学交上几十元一门的补考费,应该大部分都能过了。于是,我横下一条心,坚持看 我的单片机书和资料。 当你明白了单片机是这么一回事的时候,显而易见的问题出来了:我要选择那种语言为单片机编写程序呢这个问题,困扰了我好久。具 体选择C51还是A51呢汇编在我们大二之前并没有开过课,虽然看着人家的讲解,很容易明白单片机的每一时刻的具体工作情况,但是一合上 书或者资料,自己却什么也不知道了,根本不用说自己写程序了。于是,我最终还是决定学C51,毕竟C51和我们课上讲的C语言,有些类似, 编程的思想可以说是相通的。而且C51还有更大的优点就是编写大程序时的优越性更不言而喻,当然在那时,我并没有想的那么深远,C51的特 点,还是在后来的实践过程中,渐渐体会到的!朋友如果你选择了C51,那么请继续往下看,如果你选择了A51,那么你可以不要看了!因为下面讲 的全是C方面的,完全在浪费你的时间! 呵呵 ^_^ 第二,既然你想学好单片机,你必须得舍得花钱,如果不买些芯片回来自己动手焊焊拆拆的(但是在后期会介绍给大家一个很好用的硬件 仿真软件,并不需要你用实验板和仿真器了,直接在你的PC上完成,但是软件毕竟是软件,从某个特定的意义上来说是并不能代替硬件的),即使 你每天捧着本书,把那本书翻烂,也永远学不会单片机的!刚接触单片机的朋友,看了资料,一定会对以下几个词见的比较多,但是具体的概

C工程项目学习笔记

C#工程项目学习笔记 using(C# 参考) using关键字有两个主要用途: 1作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型。 using指令有两个用途:允许在命名空间中使用类型,这样,就不必在该命名空间中限定某个类型的使用;为命名空间或类型创建别名,这称为“using 别名指令”。 2作为语句,用于定义一个范围,在此范围的末尾将释放对象。 partial(分部、类型)(C# 参考) 分部类型定义允许将类、结构或接口的定义拆分到多个文件中。UserControl 类 提供一个可用来创建其他控件的空控件。 IContainer 接口 提供容器的功能。容器是在逻辑上包含零个或更多个组件的对象。override (C# Reference) 要扩展或修改继承的方法、属性、索引器或事件的抽象实现或虚实现,必须使用override修饰符。 IDisposable .Dispose 方法 执行与释放或重置非托管资源相关的应用程序定义的任务。 base(C# 参考) base关键字用于从派生类中访问基类的成员:调用基类上已被其他方法重写的方法; 指定创建派生类实例时应调用的基类构造函数。 基类访问只能在构造函数、实例方法或实例属性访问器中进行。 从静态方法中使用base关键字是错误的。所访问的基类是类声明中指定的基类。ContainerControl .Dispose 方法 释放由容器占用的资源。

#region(C# 参考) #region使可以在使用Visual Studio 代码编辑器的大纲显示功能时指定可展开或折叠的代码块。在较长的代码文件中,能够折叠或隐藏一个或多个区域会十分便利,这样,可将精力集中于当前处理的文件部分。 https://www.doczj.com/doc/ac1535153.html,ponentModel 命名空间ISupportInitialize 接口 指定该对象支持对批初始化的简单的事务处理通知。ISupportInitialize .BeginInit 方法 用信号通知对象初始化即将开始。 Control .SuspendLayout 方法 Label .AutoSize 属性 获取或设置一个值,该值指示是否自动调整控件的大小以完整显示其内容。Control .Location 属性 获取或设置该控件的左上角相对于其容器的左上角的坐标。 Point 构造函数 Control .Name 属性 获取或设置控件的名称。 Control .Size 属性 获取或设置控件的高度和宽度。 Size 构造函数

C语言初学者的几个经典习题

1.求两个数的最小公倍数: #include void main() { int a,b, num1,num2,temp; printf("请输入两个数:\n"); scanf("%d%d",&num1,&num2); if (num1 int sum_day(int year,int month,int day); void main() { int year,month,day;int days; printf("请输入要查询的年月日\n"); scanf("%d%d%d",&year,&month,&day); days=sum_day(year,month,day); printf("该天是%d天\n",days); } int tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int sum_day(int year,int month,int day) { int i,days=0; if(year%4==0&&year%100!=0||year%400==0) tab[2]=29; for(i=1;i int isprime (int a); void main()

C语言学习心得体会 篇

c语言学习心得体会一:c语言学习心得体会 c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要。 在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。 由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。包括了程序模块处理。简单界面程序。高级界面程序。程序的添加修改。用程序做一元线性回归处理以及用c语言程序来画粒度分布图等这几样比较重要的时间操作。 上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。 c语言学习心得体会二:c语言学习心得体会(1116字) c语言是在国内外广泛使用的一种计算机语言。其语言功能丰富、表达能力强、使用灵活方便、既具有高级语言的优点,又具有低级语言的许多特点,适合编写系统软件。其功能强大,不仅用在计算机上广泛用在电子,机械等方面上,而且,所有的 windows,unix,linux,mac,os/2,无一例外,哪一个不是c语言写的?很多新型的语言如,c++,java,c#,j#,perl... 都是衍生自c语言。掌握了c语言,可以说你就掌握了很多门语言。 学习c程序这门课一年了,这是我们学的第一门专业课,在大学里c语言不但是计算机专业的必修课程而且也是非计算机专业学习计算机基础的一门必修课程。所以作为我这个计算机专业的学生来说当然十分重要,老师在第一节课说过,c语言是计算机的基础,大多数软件都需要用c语言来编写,通过一个年的学习,使我由初步掌握简单的应试知识到完成高难度的深入编程,如我们在编写一个较大的程序时应该把它分开成几个小程序来看,这样会容易得多。同时,我觉得c语言应该是操作和理论相结合的课程,在不断地编写中去思考,两者是不可分割的。

C语言基础知识1

C语言基础知识 第一章数据库基础知识 1.基本概念:数据库、数据管理经历的五个阶段、数据库管理系统、数据库应用系统、数据库管理员。 2.数据库系统的组成:硬件系统、数据库集合、数据库管理系统及相关软件、数据库管理员和用户。其中数据库管理系统是数据库系统的核心。 3.数据库系统的特点:(1)实现数据共享,减少数据冗余(2)采用特定的数据模型(3)具有较高的数据独立性(4)有统一的数据控制功能 4.数据模型:实体间联系的种类:一对一、一对多、多对多。 5.数据模型的三种类型:层次模型、网状模型和关系模型。 6.关系数据库基本术语:关系、元组、属性、域、关键字、外部关键字。 关系的特点 7.关系运算:传统的集合运算(并、差、交)另一类是专门的关系运算(选择、投影、连接、等值连接、自然连接) 8.VF两种运行方式:菜单方式和交互式方式(命令方式和程序方式) 9.所谓项目是指文件、数据、文档和对象的集合,其扩展名为.pjx。 10.项目管理器包含的选项卡:全部、数据、文档、类、代码、其他 11.项目管理器各选项卡所包含的文件有哪些? 12.项目管理器可以完成对文件的新建、添加、移去、删除,但不包含重命名。 第2章 1.常量的种类:数值型、字符型、日期型、日期时间型和逻辑型 在书写字符型、日期型、日期时间型和逻辑型需要加定界符 2.变量是值能够随时改变的量。变量名的命名规则:以字母、汉字和下划线开头,后接字母、数字、汉字和下划线构成,不包含有空格 3.当内存变量与字段变量同名时,要访问内存变量需加前缀M.(或M->),例如M.姓名4.数组定义的格式DIMENSION数组名()、 创建数组后,系统自动给每个数组元素赋以逻辑假.F. 5.表达式的类型:数值表达式、字符表达式、日期时间表达式和逻辑表达式。每个表达式的运算规则与结果。 6.运算符$称为子串包含测试,格式<字符表达式1>$<字符表达式2> 7.SET EXACT ON│OFF的区别与含义。 8.逻辑型运算符有三个:NOT、AND、OR,其优先级顺序为NOT、AND、OR 9.常用函数数值函数、字符处理函数、日期类函数、数据类型转换函数、测试函数10.常用函数:LEN()、SPACE()、LEFT()、RIGHT()SUBSTR()、AT()、DATE()、TIME()、YEAR()、STR()、 VAL()、CTOD()、宏替换函数:&字符型变量、EOF()、BOF()、IIF() 11.程序文件的建立和修改命令:MODIFY COMMAND程序名 12.程序的基本结构:顺序结构、选择结构、循环结构。 13.选择结构包括条件语句(IF—ELSE--ENDIF)和分支语句(DO CASE--ENDCASE)、14.IF----ENDIF必须成对出现,在do case结构中不管有几个CASE条件成立,只有最先成立的那个CASE条件的对应命令序列被执行 15.循环结构包括:DO WHILE---ENDDO FOR---ENDFOR SCAN---ENDSCAN(其

C学习笔记

C#关键字 as:一个转换操作符,如果转化失败,就返回null; base:用于访问被派生类或构造中得同名成员隐藏的基类成员; bool:表示布尔值的简单类型; break:用于从loop或switch语句中推出得跳转语句; byte:表示8位长度无符号整数的简单类型; case:指定在switch语句中的一个标签。如果标签中指定的常量与switch表达式的值匹配,与标签关联的语句就被执行; catch:定义一个代码块,在特定类型异常抛出时,执行块内代码。参加try和finally; char:表示16位Unicode字符的简单类型; checked:既是操作符又是语句。确保编译器和运行时检查整数类型操作或转换时出现的溢出; class:指明一个声明得类类型声明; const:标识一个可在编译时计算出来的变量值,即一经指派不可修改得值; continue:用于返回循环顶部的跳转语句; decimal:表示128位高精度十进制数的简单类型; default:在switch语句中,指定一组语句,如果前面没有匹配得case子句,就执行这些语句; delegate:指定一个声明为一种委托类型。委托把方法封装为可调用实体,能在委托实体中调用; do:一个条件语句,无论条件是否满足,都执行至少一次; double:表示64位双精度浮点值得简单类型; else:if条件语句的一部分,如果条件不为真则执行else后面的语句。 enum:表示一个已命名常量群集得值类型; event:允许一个类或对象提供通知得成员,它必须是委托类型; explicit:一个定义用户自定义转换操作符的操作符,通常用来将内建类型转换为用户定义类型或反向操作。必须在转换时调用显式转换操作符; extern:标识一个将在外部(通常不是C#语言)实现的方法; false:一个布尔字面值; finally:定义一个代码块,在程序控制离开try代码块后执行。参见try和catch关键字; fixed:在一个代码块执行时,在固定内存位置为一个变量指派一个指针; float:表示32位单精度浮点值得简单类型; for:定义一个循环语句,只要指定条件满足就继续执行; foreach:用于遍历一个群集的元素; goto:一个跳转语句,将程序执行重定向到一个标签语句; if:一个条件语句,根据一个布尔表达式的值选择一个语句执行; implicit:一个操作符,定义一个用户定义的转换操作符。通常用来将预定义类型转换为用户定义类型或反向操作。隐式转换操作符必须在转换时使用; in:foreach语句遍历语法的一部分,被放在变量名与要遍历的群集之间;

简单易懂的C语言源代码(供初学者使用)

#include main() {float pi=3.14159265,r; printf("enter radius:\n"); scanf("%f",&r); printf("r=%.2f,c=%.2f,area=%.2f\n",r,2*pi*r,pi*r*r); system("pause"); } #include main() {int m,n,x,y; printf("inputm,n:\n"); scanf("%d%d",&m,&n); if (n%2==1) {printf("error!! n bu shi ji shu!\n",n); return;} /*n在这里不能是奇数*/ x=(4*m-n)/2; y=(n-2*m)/2; if((x>=0)&&(y>=0)) printf("x=%d,y=%d\n",x,y); else printf("shu ru cuo wu!\n");

getch(); } #include #include #include main() {float a,b,C; printf("enter 3number(a,b,C):\n"); scanf("%.2f %.2f %.2f",&a,&b,&C); s=0.5*a*b*sinC; printf("s=%.2f\n",s); system("pause"); } #include main() {int ds,nl,yf; char c; printf("shu ru ds;\n"); scanf("%d",&ds); if (ds<14||ds>1184)

c语言学习笔记(数组、函数)

数组 2010-3-29 22:40 一维数组的定义和一维数组的引用 内存中一串连续的存储单元(变量),叫数组。指针移动和比较只有在一串连续的数组中才有意义。 当数组中每个变量只带一个下标时,为一维数组。 定义一个一维数组: 类型名数组名【常量表达式】如:int a[8]; 说明:①定义一个一维整型名为a的数组。 ②方括号中规定此数组有8个元素,(a【0】-a【7】),不存在a【8】这个元素。 ③a数组中每个元素均为整型,且每个元素只能存放整型。 ④每个元素只有一个下标,且第一个元素的下标总为0。 ⑤c编译程序,为a数组开辟8个连续存储单元。 3)在定义数组语句中,可以有多个数组说明符;它们用逗号隔开。 例:double a【22】,v【100】,u【5】,a,b,c;注:双精度型每个单元占用8个字节的存储空间。另外,也可以和普通变量一起定义。 用逗号分隔开。 2010-3-23 10:29 一维数组元素的引用2 1) 引用形式:数组名【下标表达式】可以是:常量,变量,表达式。 如:double x【8】则x【0】x【j】x【i+k】均合法 2) (1)一个数组元素实际上就是一个变量名,代表内存中的一个存储单元。我们可以把数组元素看做一个变量名来处理。 (2)一个数组不能整体引用,数组名中存放的是一个地址常量,它代表整个数组的首地址。当学习指针时,引用的变量的地址,就是变量中第一个字节的地址。数组的首地址也是它的第一个元素的第一个字节的地址,即它的首地址。 数组的首地址存放在数组名中。所以说,数组名就代表一个地址。数组名是一个地址值。 (3)在引用数组元素时,数组元素下标表达式必须是整数,下标表达式下限为0.系统并不自动检验数组元素下标是否越界,因此编程时要注意。 如:double a,b; int c[10]; a=2.0;b=3.0; 则a[i]; 是不合法的。 给数组赋初值时,如果所赋初值少于元素个数时,后面的元素补为0,字符补为’\0’可以通过赋初值来定义一个数组的大小。如:int a[]={0,0,0,0,0}; 相当于:a[5]={0};

C程序设计 读书笔记

『C程序设计』读书笔记 关键字:c语言 原作者姓名:loose_went 文章原出处:https://www.doczj.com/doc/ac1535153.html, 写在前面: 《C程序设计》可以说是一本再基础不过的编程书了,但每读一遍的感觉却都是不同的,可以说,每读一遍,都会有很多新的收获。真所谓老书再读,回味无穷啊!此笔记是《C程序设计》谭浩强编著,清华大学出版社出版。除了将书中的重点知识点记下来外,也加入了我对知识点的理解,我想这一点是读书笔记的重要性所在。 第一章概述第二章数据类型、运算符与表达式 第三章最简单的c程序设计第四章逻辑运算和判断选取控制 第五章循环控制第六章数组 第七章函数第八章预编译处理 第九章指针第十章结构体与共用体 第十一章位运算第十二章文件 第一章概述 1. C语言的特点 ①语言简洁、紧凑,使用方便、灵活。共有32个关键字,9种控制语句。 ②运算符丰富,公有34种运算符。 ③数据结构丰富,数据类型有:整型、实型、字符型、数组、指针、结构体、共用体等。 ④具有结构化的控制语句(如if…else、while、do…while、switch、for) ⑤语法限制不太严格,程序设计自由度大。 ⑥允许直接访问物理地址,能进行位(bit)操作,可以直接对硬件操作。 ⑦生成目标代码质量高,程序执行效率高。 ⑧可移植性好。 2. C语言的用途 C虽不擅长科学计算和管理领域,但对操作系统和系统实用程序以及对硬件进行操作方面,C有明显的优势。现在很多大型应用软件也用C编写。 Top of Page 第二章数据类型、运算符与表达式

1. C的数据类型 C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。 2.常量与变量 常量其值不可改变,符号常量名通常用大写。变量其值可以改变,变量名只能由字母、数字和下划线组成,且第一个字符必须为字母或下划线。否则为不合法的变量名。变量在编译时为其分配相应存储单元。 3.整型数据 整型常量的表示方法:十进制不用说了,八进制以0开头,如0123,十六进制以0x开头,如0x1e。整型变量分为:基本型(int)、短整型(short int)、长整型(long int)和无符号型。不同机器上各类数据所占内存字节数不同,一般int型为2个字节,long型为4个字节。 4.实型数据 实型常量表示形式:十进制形式由数字和小数点组成(必须有小数点),如:0.12、.123、123.、0.0等。指数形式如123e3代表123×10的三次方。 实型变量分为单精度(float)和双精度(double)两类。在一般系统中float型占4字节,7位有效数字,double型占8字节,15~16位有效数字。 5.字符型数据 字符变量用单引号括起来,如'a','b'等。还有一些是特殊的字符常量,如'\n','\t'等。分别代表换行和横向跳格。 字符变量以char 来定义,一个变量只能存放一个字符常量。 字符串常量是由双引号括起来的字符序列。这里一定要注意'a'和"a"的不同,前者为字符常量,后者为字符串常量,c规定:每个字符串的结尾加一个结束标志'\0',实际上"a"包含两个字符:'a'和'\0'。 6.数值型数据间的混合运算 整型、字符型、实型数据间可以混合运算,运算时不同类型数据要转换成同一类型再运算,转换规则: char,short -> int -> unsigned -> long -> double <- float 7.运算符和表达式 c运算符包括: 算数运算符(+ - * / % ) 关系运算符( > < == >= <= != )

c语言学习笔记

网络通讯中数据大小端的问题: 大端模式:高位字节放在内存的低地址端,即该值的起始地址;低位字节排放在内存的高地址端。 小端模式:低位字节放在内存的低地址端,即该值的起始地址;高位字节放在内存的高地址端。 数组的名字是一个常量指针,如X【2】,X是一个常量指针,没有分配的内存。 数据存在存储空间,数值不存在。 在C语言里,指针可以访问到任何地方,但是对不应该访问的地址进行访问没有意义,也可能会禁止读写。 函数的接口类型,可变参数的类型和执行跳转: C语言的函数名可以看做一个地址常量(和数组一样)。 系统的堆栈:堆和栈的第一个区别就是申请方式不同:栈(英文名称是stack)是系统自动分配空间的,例如我们定义一个char a;系统会自动在栈上为其开辟空间。而堆(英文名称是heap)则是程序员根据需要自己申请的空间,例如malloc(10);开辟十个字节的空间。由于栈上的空间是自动分配自动回收的,所以栈上的数据的生存周期只是在函数的运行过程中,运行后就释放掉,不可以再访问。而堆上的数据只要程序员不释放空间,就一直可以访问到,不过缺点是一旦忘记释放会造成内存泄露。、 、 预处理操作: 宏定义:#define M 3; #define M(x,y) 2*x+y; 预处理对宏的处理,分为3类: 预处理“标识符”的展开; 预处理“标识符”的判断; 预处理“标识符”的文本替换。 #if 0 。。。。 #endif 用作代码注释。 基础类型重定义:一个C程序在PC上开发,逻辑验证正确后,下需要移植到某个嵌入式系统中,但是它们对应的int的位宽定义不同,目标系统是X86时,编译器将其看做32位,而目标系统为嵌入式系统的时候,编译器将其看作16位(对应的32位为long关键词)。这种情况,就需要进行基础类型的重定义: #define _TARGET_X86_SYSYTEM 0 #define _TARGET_DEV_SYSYTEM 1 #define _TARGET_SYSYTEM _TARGET_X86_SYSYTEM #if(_TARGET_SYSYTEM = _TARGET_X86_SYSYTEM) Typedef signed int _i32 Typedef unsigned int _u32 #elif(_TARGET_SYSYTEM = _TARGET_DEV_SYSYTEM)

初学C语言常用简单程序代码

初学C语言常用简单程序代码素数的筛选 #include #include #define N 1000 int main(int argc, char* argv[]) { int i,j,num[N]; for(i=0;i

main() { int x,s,t,d; scanf("%d",&x); s=x%60; t=(x/60)%60; d=(x/60)/60; printf("%d时%d分%d秒",d,t,s); } 三个数的交换 #include void main() { int a,b,c,t; scanf("%d%d%d",&a,&b,&c); printf("The original number:a=%d,b=%d,c=%d\n",a,b,c); t=a,a=b,b=t; t=a,a=c,c=t; printf("after swap:a=%d,b=%d,c=%d",a,b,c); } switch语句的运用 #include main() { int a,m; printf("please input a number:"); scanf("%d",&a); switch(a/10) { case 10: case 9: m=5; break;

C语言高级编程学习笔记

C语言高级编程 2015年2月4日 16:09 ?常用ubuntu命令 printf("%p",&a);//打印变量a的地址?内存结构

?编译四步骤 ?数据类型 告诉CPU如何读写内存。 基本数据类型:char,short,int,long,float,double...... 构造数据类型:数组,结构体,联合体。 指针类型: 空类型:void C语言中数据类型的字节长度

?局部变量 生命周期从定义开始到函数结束,作用域在当前函数模块内。 ?全局变量 生命周期从编译开始到程序运行结束。作用域在变量定义之下。全局变量的内存地址在编译的时候就已经确定,所以无论程序运行多少次全局变量的地址都不会改变。 全部变量和局部变量重名的话全局变量就会被屏蔽。 ?static 作用:用于声明一个静态变量。不初始化存储在bass区并且自动赋值为0,初始化过的存储在data区。 生命周期:从编译开始到程序运行结束。 作用域:static修饰的局部变量,作用域在局部。static修饰的全局变量,作用域在定义之下,可见域在当前文件中。static修饰的变量外部文件无法调用。 static修饰函数用于隐藏该函数,函数可见域只在当前文件内。 ?extern 引用外部变量。 ?const

声明一个只读变量。 指针 int * p; 指针的值:p为指针变量,用来存储地址。p的值为指向的空间的地址值。 指针的类型:int *为p的类型(所有的指针类型都占4个字节,char *也占用4个字节)。 指针指向的类型:int为指针指向的空间的数据类型。 指针指向的值:*p为指针指向的值,指针指向的空间的间接引用(别名)。 指针的赋值:要操作指针必须给指针一个合法的指向。 指针初始化:char *p=NULL; 强制类型转换: char *p = NULL; int a = 258; p = (char *)&a; *p = 2;//溢出 //cha *类型指针只能指向char类型空间地址,如果要操作其他类型空间需 要强制类型转换。char *类型指针只能操作char类型空间,就是一个字节 的空间。 任何数据类型之间都可以强制类型转换,指针之间不会隐式转换。类型不 匹配不能进行运算或赋值。强制类型转换仅仅是在运算过程中有效,并没 有改变变量或者地址的类型。 赋值的规则:类型匹配。 int a; int *p=&a; int **q=&p;

相关主题
文本预览
相关文档 最新文档