杂识01
01编译过程:
.cpp
.ii(预处理文件) g++ -o HelloWorld.ii -E HelloWorld.cpp
.s(汇编文件) g++ -o HelloWorld.s -S HelloWorld.ii
.o(目标文件) g++ -o HelloWorld.o -c HelloWorld.s
.exe(二进制文件) g++ -o HelloWorld.exe HelloWorld.o
HelloWorld
02指针
值为内存地址的变量
内存的修改器
间接获取数据
使用变量名 -> 直接获取数据
int * ptr :整型指针ptr
两种理解:
int* p: p地址变量,表示0x地址;声明定义
int *p: *p整型变量,表示一个整型值
声明和使用,“*”含义完全不同
&
取地址符
——取地址的好处直接找到该对象,修改值
int num = 1024;
int * ptr_num ;
//取num变量的地址,赋值给ptr_num
ptr_num = #
*
间接运算符
int num = 1024;
int * ptr_num; //* ->定义
ptr_num = # //ptr_num = num的地址
*ptr_num = 1111; //num = 1111
//* ->间接取值
//根据你的地址,找到你的空间值
指针 == 名片
取地址==查水表
实例
#include <iostream>
using namespace std;
int main()
{
double num = 1024.5;
//声明一个指针,指向num变量
double * ptr_num = #
//ptr_num = #
cout << "ptr_num的值" << ptr_num<< "\t" << &num << endl;
cout << "ptr_num指向空间的值是:" << *ptr_num <<endl;
return 0;
}
思考:
#include <iostream>
using namespace std;
int main()
{
char ch = 'a'; //ch字符,&ch字符串
char * ptr_ch = &ch; //不用&会报错
/*cout << ptr_ch << endl; //以字符串的形式打印字符*/
cout << (void *)ptr_ch << endl; //强转成字符指针类型
cout << *ptr_ch << endl;
return 0;
}
char * 默认后面赋值给它的是字符串
nullptr
- 默认值为0
最危险的用法就是不赋值
double * ptr_double = nullptr;
-
野指针 -> 避免
-
及时正确释放
用法
int * ptr1 = nullptr;
int * ptr2 = 0;
int * ptr3 = NULL;
- 尽量定义了对象之后再定义指向它的指针
void *
指向任意类型的指针
#include <iostream>
using namespace std;
int main()
{
double objNum = 3.14;
double * ptr_obj; ptr_obj = &objNum;
cout << objNum << "\t\t" << &objNum << endl;
cout << *ptr_obj << "\t\t" <<ptr_obj << endl;
//cout << boolalpha;
void * vptr_obj; vptr_obj = &objNum;
cout << (ptr_obj == vptr_obj) << endl;
return 0;
}
- void* -> 存放一个内存地址,地址指向的内容是不能确定的
- 不可以用 void* 定义一个指针
- 一般用来和别的指针比较,或作为函数参数
指针小结
- 指针是变量,指针是地址
- 普通变量 :指针 -> 对象 :指针
- 指针不可以和现有变量同名
- 指针可以指向数组、结构体、共同体等高级数据结构
03引用
为对象起绰号
int int_value = 1024;
//reValue指向int_value,是int_value的另一个名字
int& reValue = int_value;
引用必须被初始化
指向常量的引用是非法的
const double& ref = 100; //合法
本质还是指针,是封装了的指针;
#include <iostream>
using namespace std;
int main()
{
int num = 108;
int& rel_num = num;
rel_num = 118;
cout << num << "\t" << rel_num << endl;
cout << rel_num << "\t" << &rel_num << endl;
return 0;
}
指针和数据的区别
#include <iostream>
using namespace std;
int main()
{
double score[] = {11,22,33,44,55};
double * ptr_score = score;
cout << sizeof(score) << "\t" << sizeof(ptr_score);
//8*5=40;4
return 0;
}
==指针
指针类型任何时候都只占4个字节
原文链接: https://www.cnblogs.com/qianchanglai/p/12614938.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/339111
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!