c++基础

来源:互联网 发布:ps4连接不了网络 编辑:程序博客网 时间:2024/06/14 01:34

1.struct关键字

struct Movie/*可以指定类型名也可以不指定*/{    //成员都是public的    int ID;    string Name;} movie; //可以在声明struct的时候声明一个struct实例,这个有啥意思呢?   int main(){    //movie变量在Movie结构声明处定义了    movie.ID = 100;    movie.Name = "Face Off";     cout<<"movie.ID = "<<movie.ID<<endl;    cout<<"movie.Name = "<<movie.Name<<endl;

同样的道理:
int (*f)(int,int)                //定义了一个函数指针f.但f不是一个类型,在后续中只能用f,不能用
typedef int (*f)(int,int) //定义了一个类型.

2.函数指针

typedef int (*f)(int,int);int add(int a,int b){return a+b;}int plus(int a,int b){return a-b;}int pro(int a,int b,f fuc){   return fuc(a,b);}int main(){int a=1,b=2;       cout<<pro(a,b,plus);return 1;}

3.指针定义

a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to an integer
d) int a[10]; // An array of 10 integers
e) int *a[10]; // An array of 10 pointers to integers
f) int (*a)[10]; // A pointer to an array of 10 integers
g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer
h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer
4.数组双引号和单引号赋

char a[10]={'r','s','a','s','r','w','q','e','w','q'};
char b[10]="rsasrwqewq";
1. strlen(a)输出的结果不一定是10,也可能是其他的值
    strlen的参数是一个字符串,不是字符数组,它遇到字符串结束标识符就会返回,但是char a[10]={'r','s','a','s','r','w','q','e','w','q'};中并没有结束标识符,所以这个数会是一个随机的数,不一定是20,如果想要strlen(a)返回10,则需要进行如下的改动:char a[11]={'r','s','a','s','r','w','q','e','w','q','\0'};
2. 使用大括号的方式对字符数组赋值,在末尾是不会有字符串的结束标识符的,确切的说只是一些列的字符;使用双引号括起来的一系列字符成为字符串,字符串是自动添加字符串结束标识符的

5. C++中定义对象的语法,带括号与不带括号有什么区别?

class MyClass{public:    MyClass() { std::cout << "Hello MyClass!" << std::endl; }public:    void MyMethod() { std::cout << "Hello MyMethod!" << std::endl; }};
如果这样定义对象:MyClass obj; 那么它的构造函数将会被执行,如果调用obj.MyMethod();也会执行正确。可是如果带有括号:MyClass obj(); 那么它的构造函数不会被执行,调用obj.MyMethod();也会出现语法错误,请问这种语法是把obj定义成什么了? MyClass obj()把obj定义成什么 从语法上看是定义了一个名为obj,类型为MyClass类(也就是返回值为MyClass类型)的无参数函数。6. int* 和 int  * (注意空格的位置)

对于单变量声明,即一条语句中只声明一个指针变量的情况,没有区别;原因是C语言允许形式的自由性。即以下两种声明方式效果相同。

[c++] view plaincopyprint?
  1. int  *a;  
[c++] view plaincopyprint?
  1. int*  a;  
7.变量申明
对于一条语句中声明多个指针变量的情况,有很大区别。
[c++] view plaincopyprint?
  1. int*  a, b,c;  

       对于这条语句,常会造成我们的误解:认为声明了三个整型指针。但是正解是:只有a是整型指针,b和c都是普通的整数。 
这里的星号“*”号只是声明变量a的一部分,以上的变量声明相当于:

[c++] view plaincopyprint?
  1. int *a;  
  2. int b;  
  3. int c;  
如果希望在一条语句中声明多个整型指针,正确的方式应该是:
[c++] view plaincopyprint?
  1. int *a, *b, *c;