CPP [学习笔记] 从难点!! C++指针开始(后面学习的时候发现指针一看就会一用就...
1.指针概念#include<iostream>
using namespace std;
#include<string>
int main()
{
//1.定义指针
string name = "李白";//定义个一个数据
string *temp;//创建指针
temp = &name;//让temp的指针记录a的地址 &是取地址符号
cout << "name的地址:" << &name << endl;//打印出name地址测试结果
cout << "temp的地址:" << temp << endl; //打印出temp地址测试结果
system("pause");
return 0;
}
#include<iostream>
using namespace std;
#include<string>
int main()
{
//1.定义指针
string name = "李白";//定义个一个数据
string *temp;//创建指针
temp = &name;//让temp的指针记录a的地址 &是取地址符号
cout << "name的地址:" << &name << endl;//打印出name地址测试结果
cout << "temp的地址:" << temp << endl; //打印出temp地址测试结果
//2.使用指针
//通过(解引用)的方式来找到指针指向的内存
//指针前面加{【*】代表解引用},找到指针中所指向的内存数据。
*temp = "比如我改了这个变量的内容";
cout<<"那现在的变量name的内容为:"<<name<<endl;
cout<<"解引用后的是内存中的数据 *temp"<<*temp<<endl;
system("pause");
return 0;
}
本帖最后由 bester 于 2021-5-9 12:28 编辑
我给你加一句话,指针的实质就是以指针类型去读一个地址的实际值,像文中string *temp就是去读保存在temp这个地址中的实际内容,该地址的内容的实际类型是string,temp=取得name的地址 学习使我快乐 本帖最后由 zds212 于 2021-5-9 13:00 编辑
const常量指针
const修饰指针的三种情况
1.cont修饰指针常量指针
2.cont修饰常量指针常量
3.cont即修饰指针,又修饰常量
#include<iostream>
using namespace std;
#include<string>
int main()
{
int a = 10;
int b = 10;
//1.常量指针
const int* temp = &a;
temp = &b;//正确的,可以改地址
//*temp=100; temp已经const掉了,内存中的数据不能修改
//2.指针常量
int* const temp2 = &a;
//temp2=&b; temp2被const掉。所以temp不能修改地址
//3.const修饰指针修饰常量
const int* const temp3 = &a;
//temp3=&b; temp3的地址被定为常量不能修改
//*temp3=100; temp3的指针的所指向的内容被定为常量不能修改
system("pause");
return 0;
}
指针数组
#include<iostream>
using namespace std;
#include<string>
int main()
{
int arr = { 5,1,4,3,2 };
int* temp = arr; //arr是数组的首地址
cout << *temp << endl; //解引用数组中的首个元素 5
int len = sizeof(arr) / sizeof(arr);
for (int i = 0; i < len; i++)
{
cout << *temp << endl; //现在是数组中的第二个元素 1
temp++; //=temp+1一个元素 往后一个元素
}
system("pause");
return 0;
}
指针函数
#include<iostream>
using namespace std;
#include<string>
void test(int *a1,int *b1)// 相当于 *a1=&a,*b1=&b
{
//int temp = a1;不用*是错误的需要解引用
int temp = *a1; //刚创建的temp是正常的变量不用解引用
*a1 = *b1;
*b1 = temp;
}
int main()
{
int a = 1;
int b = 2;
test(&a, &b); //传入a和b的地址到test的函数里
cout << a << "\n" << b << "\n";
system("pause");
return 0;
} bester 发表于 2021-5-9 12:27
我给你加一句话,指针的实质就是以指针类型去读一个地址的实际值,像文中string *temp就是去读保存在temp ...
多谢大佬。 多多指教{:1_893:} 指针 和 结构体关键字struct
利用 -> 符号访问
#include<iostream>
using namespace std;
#include<string>
struct house// 房子
{
string parlour;
string bedroom;
string kitchen;
};
int main()
{
struct house hou = {"客厅","卧室","厨房"}; //创建结构体变量,并赋值
struct house* temp = &hou; //通过指针指向结构体变量
cout << temp->parlour <<temp->bedroom<< endl; //通过指针访问结构体变量中的数据
cout << hou.kitchen << endl; //直接访问结构体中的数据
system("pause");
return 0;
}
收藏吃灰 new运算符 堆区开辟 以及数组的释放方式 delete[]数组名
#include<iostream>
using namespace std;
#include<string>
#include<ctime>//时间头文件
//1.new的基本语法
int* func()
{
//在堆区创建整型数据
//new返回的是 该数据的指针
int* p = new int(1);
return p;
}
void test()
{
int* p = func();
cout << *p << endl;
delete p;
//cout << *p << endl; 已经释放了p的内存
}
//--------------------------
//数组堆区开辟
void test02()
{
srand((unsigned int)time(NULL));//时间种子
//在堆区创建数组
int* arr = new int;//5代表5个元素
for (int i = 0; i < 5; i++)
{
arr = rand() % 41 + 60;//给数组赋值 60到100的随机数
}
for (int i = 0; i < 5; i++)
{
cout << arr << endl;
}
delete[] arr; //数组的释放 delete[] 数组名
}
int main()
{
test();
test02();
system("pause");
return 0;
}
页:
[1]
2