【每天学一点】C++基础01

  怎么说呢,昨天晚上发了一个博客竟然要审核,有点僵。想想看了点TCP/IP果然如果得深入了解的话,还是很麻烦的。今天端午节还是从C++开始吧,说到C++从大二就开始学了,然后最近论文算法也是用到了C++来编,由于不考虑效率只求结果,所以只是了解很少关于C++的知识,里面很多的东西都忘记了。该学的还是要学啊,但学习嘛,还是要从基础的来……
  
  学习资料《C++ Primer(第五版)》。


  声明:使得名字被程序所知,一个文件如果想使用别处定义的名字则必须包含对那个名字的声明。声明一个变量,就在关键字前加extern
  定义:负责创建与名字关联的实体。

不怎么好理解,通过编程尝试了下:

//B.h
int a;
void op();

----------

//C.cpp
#include<iostream>
using namespace std;
extern void op();
extern int a;

//这里如果再定义op(),程序会报错。
/*void op(){
    cout << "its c";
}
*/
void test(){
    cout << a << endl;
        op();
}

------------

//A.cpp
#include<iostream>
#include"C.h"
using namespace std;
extern int a=1;
extern void op();
void op(){
    cout << "its a" << endl;
}
void main(){
    a = 2;
    cout << a << endl;
    op();
    test();
    getchar();
}

从结果上看,输出结果为:
2
its a
2
its a

  可以看出,声明变量或函数后,若没有定义,需要重定义。若在多个文件中使用同一个变量,就必须将声明和定义分离。变量的定义必须出现在且只能出现在一个文件中,而其他用到改变量的文件必须对其进行声明,但绝对不能重复定义。


作用域

以上面的程序为模板修改了下A.cpp

#include<iostream>
#include"C.h"
using namespace std;
extern int a=1;
extern void op();
//此时不能再定义全局变量a了。
//int a = 2;

void op(){
    cout << "its a" << endl;
}
void main(){
    int a = 3;
    cout << a << endl;
    op();
    test();

}

此时输出:
3
its a
1
its a

从上面可以看出,内层作用域强度大于外层作用域,若在外面对声明变量进行了定义,似乎就不能重新定义全局变量。


引用:为对象起了另一个名字,引用即别名。

int a=1;double b=2.2;
int &c=a;  //c是一个引用。
double &d=b;
int &e=b;  //错误:引用类型的初始值必须是Int型对象
int &f=1//错误:引用类型的初始值必须是一个对象

指针
1.指针本身就是一个对象,允许对指针赋值和拷贝。
2.指针无需在定义时赋初值。

定义方式:

int *p1,*p2//p1,p2是int型对象指针。

获取对象的地址:指针是存放某个对象的地址,若想获取,需要使用取地址符

int a=1;
int *p=&a;
cout << p <<","<< *p<<endl;

输出:
0018FC7C,1
可以看出,P为地址,*p指向这个地址的内容。

指针值
1.指向一个对象
2.指向紧邻对象所占空间的下一个位置。
3.空指针,指针没有指向任何对象
4.无效指针,上述以外其他值

空指针:不指向任何对象,在试图使用一个指针之前,可以首先检查它是否为空。

int *p1=nullptr;
int *p2=0;

//首先需要#include cstdlib 
int *p3=NULL; 

建议初始化所有指针,尽量等定义了对象之后再定义指向它的指针。若不知道,则初始化为nullptr或者0。

赋值和指针

int a=1,b=2; 
int *p1=0; //p1被初始化,但没有指向任何对象
int *p2=&a; //p2被初始化,存有a的地址
int *p3; //如果p3被定义在块内,则值无法确定

p3=p2; //p3和p2指向同一个对象a
p2=0; //p2不指向任何对象
p1=&b; //p1指向b
*p1=0; //b=0

void* 指针 : 可以存放任意对象地址,一个void*可以存放一个地址

double obj=3.14, *pd=&obj;
void *p=&obj;   
p=pd; 

指向指针的指针

int a=1024;
int *p=&a;
int **pp=&p;
int ***ppp=&pp;

cout<<a<<" "<<*p<<" "<<**pp<<" "<<***ppp<<endl; 

输出都为1 。补充:**ppp=*pp=p=a的地址

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值