C++初学者对指针和引用的初步认识
指针
内存地址,整数类型
指针变量
同为记录内存地址的整数,但是指向的目标存储类型不同则不能互相赋值。因此下面这样是会报错的!
char c='h';
int* pc=&c;
visual studio的报错:
char*和int*:
#include <iostream>
#define cout(a) std::cout << a << std::endl;
int main()
{
const char* str = "hello world";
int a = 2021;
const int* i = &a;
cout(str);
cout(i);
}
cout
cout对于char*特别对待,虽然传的是指针,但是会输出值
const char* str="hello world";
//赋给str的不是"hello world",而是'h'的地址
std::cout<<&str<<std::endl;
//'h'的地址
std::cout<<*str<<std::endl;
//h
显然当检测到是char* 时会做特殊处理,输出其代表的字符串。
引用
“引用就是外号”
引用就像起外号,所以满足以下几点:
- 被引用的变量要已经被申明(你不会给一个不存在的人起外号)
- 对引用的操作就相当于对本身的操作(你打了法外狂徒一拳=你打了张三一拳)
#include <iostream>
#define cout(a) std::cout << a << std::endl;
int main(){
int i = 2020;
int& d = i;
cout(i);
cout(d);
cout(&i);
cout(&d);
d = 2021;
cout(i);
cout(d);
std::cin.get();
return 0;
/*输出结果
2020
2020
00EFF734
00EFF734
2021
2021
*/
}
闲话
虽然以前学过一个学期的c,但是当开始自学c++的时候发现之前学的一塌糊涂,指针的概念似懂非懂。
都没有想过为什么printf("%d%s",d,s);一个是值一个是址结果输出都是址。
自己总结的内容,如有错误,欢迎指正。
究极题外话:写着写着停电了,吓死我了,CSDN好评!