#include<iostream>
using namespace std;
int main()
{
int num1=20;
int *p;//定义指针
p=&num1;// 让指针记录地址
cout<<"a的地址为:"<<&num1<<endl;
cout<<"指针的值:"<<p<<endl;
cout<<"使用指针:"<<*p<<endl;
*p=100;
cout<<"使用指针:"<<*p<<endl;
system("pause");
}
1.2 指针所占的内存空间
指针是一种数据类型。
32位操作系统
64位操作系统
4字节(所有类型int */float */double *…)
8字节(所有类型)
1.3 空指针
定义:指针变量指向内存为0的空间,空指针指向的内存不可访问。
作用:初始化指针,int *p=NULL;
0-255之间的内存是系统占用,不可访问。
1.4 野指针
定义:指向非法的内存空间/不是我们自己申请的内存。
int *s=(int *)0x1124;
cout<<"指针的值:"<<*s<<endl;//报错
1.5 const修饰的指针
const修饰指针:常量指针,const ,int * p;指针指向的值不可改,指向的地址可以改。
const修饰常量:指针常量,int * const p;指针指向的值可改,指向的地址不可以改。
const既修饰指针又修饰常量。const int * const p;指针指向的值、指向的地址都不可以改。
1.6 指针与数组
使用指针访问数组中的元素。
#include<iostream>
using namespace std;
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9};
int *p=arr;
for(int i=0;i<9;i++)
{
cout<<"第"<<i+1<<"数是"<<*p<<endl;
p++;
}
system("pause");
}
1.7 指针与函数
利用指针作为函数的参数
地址传递,和值传递不同,地址传递可以改变实参的值。
#include<iostream>
using namespace std;
void swap(int *p1,int *p2)
{
int temp=*p1;
*p1=*p2;
*p2=temp;
}
int main()
{
int a=1;
int b=2;
swap(&a,&b);
cout<<"a的值 "<<a<<endl;
cout<<"b的值 "<<b<<endl;
system("pause");
}
#include<iostream>
#include<string>
using namespace std;
struct People
{
//string name;//一些编译器设置string name;在初始化时会崩溃
char name[20]="小张";
int age=1;
int phone=23;
}s1;//第1种创建结构体变量的方法
int main()
{
struct People s2 ={"小明",15,100};// 第二种方法
struct People s3;//第三种方法
s3.age=18;
s3.phone=123456;
cout<<s1.name<<" 年龄:"<<s1.age<<"电话:"<<s1.phone<<endl;
cout<<s2.name<<" 年龄:"<<s2.age<<"电话:"<<s2.phone<<endl;
cout<<s3.name<<" 年龄:"<<s3.age<<"电话:"<<s3.phone<<endl;
system("pause");
}
2.2 结构体数组
将在定义的数组放入结构体中。
#include<iostream>
#include<string>
using namespace std;
struct People
{
//string name;//一些编译器设置string name;在初始化时会崩溃
char name[20];
int age;
int phone;
};
int main()
{
struct People arr[3]
{
{"小明",1,2},
{"小红",10,20},
{"小李",100,200},
};
system("pause");
}
2.3 结构体指针
通过指针访问结构体的成员。
People s={"小明",1,2};
People *p=&s;
cout<<p->name<<p->age<<p->phone<<endl;
system("pause");
2.4 结构体嵌套结构体
结构体中的成员可以是其他的结构体。
2.5 结构体作为函数参数
结构体作为参数向函数中传递。
两种方式:值传递和地址传递。
2.6 结构中const使用场景
防止错误操作,地址传递只占四个字节,将函数的形参改为指针可以减少占用空间,但会改变实参的值。
#include<iostream>
#include<string>
using namespace std;
struct People
{
char name[20];
int age;
int phone;
};
void print(const People *p)
{
//p->age=100;//错误操作
cout<<p->name<<p->age<<p->phone<<endl;
}
int main()
{
People s={"小明",1,2};
People * p=&s;
print(p);
system("pause");
}