首页 / C++ / C++ Day4 指针和结构体
C++ Day4 指针和结构体
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++ Day4 指针和结构体,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3876字,纯文字阅读大概需要6分钟。
内容图文
![C++ Day4 指针和结构体](/upload/InfoBanner/zyjiaocheng/612/75027673ab204b6b851e480d487850f9.jpg)
C++ Day4 指针和结构体
一、指针
- 通过指针可以间接访问内存。
- 可以通过指针来保存一个地址。
1.1 定义和使用
- 定义:数据类型 * 变量名。
- 让指针记录地址。
#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");
}
1.8 示例
- 用指针,数组,函数实现冒泡排序。
#include<iostream>
using namespace std;
void print(int *arr,int len)//打印数组
{
for(int i=0;i<len;i++)
{
cout<<arr[i]<<endl;
}
}
void upsort(int * arr,int len)//冒泡排序函数 (int arr[],int len)也可
{
for(int i=len-1;i>=0;i--)
{
for(int k=0;k<i;k++)
{
if(arr[k]>arr[k+1])
{
int temp=arr[k];
arr[k]=arr[k+1];
arr[k+1]=temp;
}
}
}
print(arr,len);
}
int main()
{
int arr[]={1,2,5,68,4,6,45,7,3};
int len=sizeof(arr)/sizeof(arr[0]);
upsort(arr,len);
system("pause");
}
二、结构体
- 用户自己定义的数据类型。
- 可以存储不同类型的数据。
2.1 定义和使用
- 使用:struct 结构体名称 { 结构体成员列表 };
#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");
}
内容总结
以上是互联网集市为您收集整理的C++ Day4 指针和结构体全部内容,希望文章能够帮你解决C++ Day4 指针和结构体所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。