1 cout<<a<<end; cin>>a;c++关于变量的输入及输出
2 C++ 中,优先级从高到低。! ~ ++为同一优先级,顺序为从右到左。如!a++相当于!(a++)。然后是* ,/ ,%,然后是+,-,再然后是 <<,>>,
然后是<=,>=,等。最后是&&,|| 等。
3- struct stuff{
- char job[20];
- int age;
- float height;
- };
- struct stuff Huqinwei; /结构体的一般定义及使用形式。通过结构体实例访问结构体中的成员或者变量。structinstance.valueabblename();
5 类的使用可以classname * instancename=new classname(); 定义类的实例,并分配内存,可以使用instancename->classfunction,完成对类中成员的使用及访问。
6 通过标准输入,实现程序的暂停。int counter; cin>>counter
7 :typedef struct abc{
}ABC;与typedef abc{
}ABC;第一种情况是将结构体abc重新起名叫ABC,类似typedef int inthua;将整型变量重新起名叫inthua.ABC是新的类型的名字
而第二种情况是定义了类型abc 的变量ABC,这种情况下ABC是变量名。
8C语言中数组是使用大括号进行如 int A[]={a1,a1,a3};
selectsort(A, N);将数组变量进行参数的传递时,只需要传数组的名字即可,
int * selectsort(int a[], int n); 将数组的传入子函数的写法,当子函数也需要返回数组时,可以将子函数的类型定义为in * 类型
int *p=selector(A,N )就可以返回数组,使指针p 指向返回序列的基地址。
// c/c++ 在使用的时候调用函数的过程中关于参数的调用 ,形参与实参一般不重名2 在子函数中的形参 一般要带上变量的类型
3 若子函数是带返回值的,返回值是什么类型,函数就是什么类型。
4:在主函数调用函数时,一般把调用的参数定义赋值后,直接在调用函数里调用就可,关于数组的调用是int main
9
sqlist *L 是声明一个指针
sqlist &L 是声明一个引用,声明一个引用,引用不能为空,并且要初始化。
一个是指针,一个是引用,两者最大的却别就是一个分配内存,另一个不分配,指针要分配内存存放变量的地址,引用就是变量的一个别名,就和数据库中的同义词一样。
10: int a[3]={1,2,3};
int *p=&a[0]
对数组的元素进行访问的两种方式
for(int i=0;i<3;i++) for(int i=0;i<3;i++)
{ {cout <<p[i]<<endl;}
cout<<*(p+i)<<endl;
13 关于递归的使用,就是在函数里调用自身,在调用自身的时候一定要注意函数的出口,也就是什么时候不满足条件了,递归结束。
def factorial(n) if n <= 1 then return 1 else return n * factorial(n - 1) end end 14: scanf是格式化输入,printf是格式化输出。 cin是输入流,cout是输出流。效率稍低,但书写简便。 格式化输出效率比较高,但是写代码麻烦。 流输出操作效率稍低,但书写简便。 / 15:从C/c++的标准库函数,new 是c++的运算符,可以理解由于c++中的运算符功能较C中的运算符在意义上作了扩展的,可以理解成函数调用 。 malloc则是底层的,new的实现中是调用了malloc来 实现堆内存的统一管理的,因此,可以认为new 是malloc的扩展同根版,而且单从内存分配的功能上来说,它们是在同一块内存区域内实现 统一管理的 16:malloc 是从C/c++的标准库函数,new 是c++的运算符,可以理解由于c++中的运算符功能较C中的运算符在意义上作了扩展的,可以理解成函数调用 。 malloc则是底层的,new的实现中是调用了malloc来 实现堆内存的统一管理的,因此,可以认为new 是malloc的扩展同根版,而且单从内存分配的功能上来说,它们是在同一块内存区域内实现 统一管理的
17:c/c++的C语言字符串类型的定义及使用访问时比较简洁的
string string1 = "aaa";
{ int counter;
for (int i = 0; i < string1.length(); i++)
cout << string1[i] << endl;
cin >> counter;
}
18:定义字符串数组char* a[] = {"1","2"}; 定义字符串数组指针a,a为指向字符串数组的指针,他的值就是a的首地址。
int num = atoi(a[1]); atoi()函数负责将字符变量变成整型变量。
19int a={};定义一个普通的整型数组,a 是数组的名字,也是数组的首地址,当要输出第i个元素的地址可以使用a+i,
对于结构体数组也是如此的,stu students[3] = { { 9801,"AA", 20 },
{ 9802,"BB", 21 },{ 9803, "CC", 19 } };
如上定义了长度为3的结构体数组,cout<<student<<endl;输出的结构体数组第一个元素地址。而students + 2结构体数组第3个元素的地址;
// 对于结构体数组,和整型数组而言,数组的名字就是第一个元素的首地址。数组(结构体)名字+i 访问i-1 个元素的地址。
int a [2][3]= { 1, 2, 3, 4 ,5,6};
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3;j++)
cout << a+(i*3)+j << endl;
20: 而字符型的数组的定义char *s[]={"rrrr"};
char *s1="wwwwewee";
char str[12]={"hellow"}; 如上定义指向字符串的指针及字符串数组
此时执行cout<<s1<<endl;/为字符串数组元素的首地址;
cout<<str<<endl; 输出执行字符串指针的名字及数组的名字都是他们所表示的字符串。
s1 指向字符串的指针,指针的大小为四个字节,sizeof(s1)=4,str是一个字符串数组,sizeof(str)就是这个字符串数组的大小,(不要忘记最后的\0).
char *a[] = { "aa", "bb" }; 字符串数组指针的定义,cout<<a<<endl; 此时的输出为a的首地址。其中的a 是指向char类型的指针数组。printf("\n%s",pchar1[i])依次存放i+1个元素的
地址。
void main() {
int i,m;
char *aa[] = { "aa", "bb", "cc", "dd" };
for (i = 0; i < 4; i++)
{
printf("%s", aa[i]);
printf("\n");
cout << aa << endl;
}
cin >> m;
} 访问指针数组的数组元素及各个元素变量的地址。
21:对链表中环的判定:http://blog.csdn.net/thefutureisour/article/details/8174313
22: 对链表的非空及长度的判定:http://blog.csdn.net/dan15188387481/article/details/49722053
23: http://write.blog.csdn.net/postedit/77850857
错误分析: 错认为 GetMemory(char *p)中的 p “就是” GetMemory(str)中的str。但p“不是”str,它只是“等于”str 。
就象: int a = 100;
int b = a; // 现在b等于a
b = 500; // 现在能认为a = 500 ?
显然不能认为a = 500,因为b只是等于a,但不是a! 当b改变的时候,a并不会改变,b就不等于a了。 因此,虽然p已经有new的内存,但str仍然是null
24:static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
25:++i 及i++的区别一定一定一定要记得区分开来,++i 在前面,记得是先加。i++记得是后加的。
26:strlen(char *s)返回字符串的长度,但是不包含结束符“\0”。所以
char string[10];
if(strlen(char *str)<=10)
{
strcpy(string,str)// 这样的化程序会报错,将if 语句改为小于10;
}
27: int a[255], i,m;
for (i = 0; i <= 260; i++)
{
a[i] = i;
cout << a[i] << endl;
}
cout << a[345] << endl;
cin >> m;
//c/c++不进行数组的越界检查。
28:int main()
{
char a;
char *str=&a;
strcpy(str,"hellow");
printf(str);
}
/因为没有为str 指向字符a的地址,
29:变量不能重复初始化,int aa=5;
aa=6;这样就可以改变变量的值,但是int aa=5;
int aa=6;
这样就不可,因为重复初始化变量
{
int aa;
char *s = "AAA";
printf("%s", s);
s[0]= "B";
printf("%s", s);
cin >> aa;
} 这样对字符串中数组赋值是不对的,因为通过第一部,字符串中的位置已经变成常量。可以通过寻址的方法对字符串赋值。
/char c[]="hellow,world";分配一个局部数组,对应的是内存中的栈
char *s="hellow,world";全局变量,对应的是内存中的普通数据段(静态存储区)
30: 4<< n 等效于 4 乘以 2的 N 次方,
31:指向函数的指针的声明及使用。
- int Sum(int a, int b)
- {
- return a + b;
- }
-
- int (*FnName)(int, int); // 声明一个函数指针,可以将FnName理解为新定义的变量
- FnName = ∑ // 将Sum函数的地址赋给它
- (*FnName)(3, 5);
32:静态局部变量只会被初始化一次,次使用上次的保存值。
静态存储方式:是指在程序运行期间分配固定的存储空间的方式。
动态存储方式:是在程序运行期间根据需要进行动态的分配存储空间的方式。
静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,占动态存储空间,函数调用结束后即释放。
33:printf("\n");实现c/c++的换行。
34:extern int a;声明一个整型的变量a, int a; 定义一个整形的变量a,声明不分配内存,但是定义需要
35:使用new 分配内存。
int *p = new int;
cout << p << endl;
*p = 100;
cout << *p << endl;
cout << p << endl;
36: 栈是由编译器在需要时分配的,不需要时自动清除的变量存储区。里面的变量通常是局部变量、函数参数等。堆是由malloc()函数(C++语言为new运算符)分配的内存块,内存释放由程序员手动控制,在C语言为free函数完成(C++中为delete)。
37:虚函数是面向对象中实现多态的函数。
void foo();//普通类函数
virtual void foo1();//虚函数
virtual void foo2() = 0;//纯虚函数
}
类里声明为虚函数的话,这个函数是实现的,哪怕是空实现,它的作用就是为了能让这个函数在它的子类里面可以被重载,这样的话,这样编译器就可以使用后期绑定来达到多态了
纯虚函数只是一个接口,是个函数的声明而已,它要留到子类里去实现。虚函数在子类里面也可以不重载的;但纯虚必须在子类去实现,
纯虚函数在子类中重载的化,一定要加上关键字virtual。,
38: 构造函数与析构函数的调用是自动进行的,构造对象的时候会调用构造函数,而销毁对象时候会调用析构函数。
构造函数及析构函数没有返回值及返回类型。
39:C语言中的结构体只是数据的组合,在c 语言的结构体中不声明函数。
40:形参可以为空,但不能省略。