C 指针&结构体简记
前言
本文简单记录C语言中,指针和结构的一些概念和简单使用。
一:指针
1.关于指针的一些认知
1.指针可以直接认为是一个内存地址
2.指针变量存储了指向数据的地址,和指向数据的数据类型
2.指针的简单使用
(1)定义指针,直接在变量名前面加上*
//定义 指向整形数据的指正p
int *p;
(2)获取i的指针,赋值给p, & 为提取地址的符号
int i=8;
int *p;
p = &i;
(3)通过指针读取数据, * 为读取数据的符号
int i=8;
int *p;
p = &i;
cout<<"data:"<<*p<<endl;
(3)指针的完整使用例子
#include<iostream>
using namespace std;
int main(){
int i=8;
int *p;
p = &i;
cout<<"指针变量指向的地址:"<<p<<endl;
cout<<"指正变量指向的数据:"<<*p<<endl;
return 0;
}
3.指针深入理解
//普通的整型变量
int p;
//这是一个普通的整型变量
//普通的指向整型数据的指针
int *p;
//首先从P 处开始,先与*结合,所以说明P 是一个指针,然后再与int 结合,说明指针所指向的内容的类型为int 型.所以P是一个返回整型数据的指针
//p是指向数组第一个元素的指针
int p[3];
//首先从P 处开始,先与[]结合,说明P 是一个数组,然后与int 结合,说明数组里的元素是整型的,所以P 是一个由整型数据组成的数组
//定义了一个三维数组,其中的每个元素p[0]、p[1]、p[2]都是指向int变量的指针
int *p[3];
//首先从P 处开始,先与[]结合,因为其优先级比高,所以P 是一个数组,然后再与结合,说明数组里的元素是指针类型,然后再与int 结合,说明指针所指向的内容的类型是整型的,所以P 是一个由返回整型数据的指针所组成的数组
//定义了一个指针,这个指针是指向一个三维数组的,可以指向的数据变量为int arr[8][3]
int (*p)[3];
//首先从P 处开始,先与*结合,说明P 是一个指针然后再与[]结合(与"()"这步可以忽略,只是为了改变优先级),说明指针所指向的内容是一个数组,然后再与int 结合,说明数组里的元素是整型的.所以P 是一个指向由整型数据组成的数组的指针
//指向指针的指针
int **p;
//首先从P 开始,先与结合,说是P 是一个指针,然后再与结合,说明指针所指向的元素是指针,然后再与int 结合,说明该指针所指向的元素是整型数据.由于二级指针以及更高级的指针极少用在复杂的类型中,所以后面更复杂的类型我们就不考虑多级指针了,最多只考虑一级指针.
//这是一个函数,输入类型为int ,输出为int
int p(int);
//从P 处起,先与()结合,说明P 是一个函数,然后进入()里分析,说明该函数有一个整型变量的参数,然后再与外面的int 结合,说明函数的返回值是一个整型数据
//P 是一个指向有一个整型参数且返回类型为整型的函数的指针
int (*p)(int);
//从P 处开始,先与指针结合,说明P 是一个指针,然后与()结合,说明指针指向的是一个函数,然后再与()里的int 结合,说明函数有一个int 型的参数,再与最外层的int 结合,说明函数的返回类型是整型,所以P 是一个指向有一个整型参数且返回类型为整型的函数的指针
二:结构体
1.结构体一些概念
1.我们定义的结构体,功能类似int,float,char 这些数据类型,使用也相似,
2.结构体是一个集合,里面包含多个相同或不同的类型的变量或数组
3.结构体是一种自定义的数据类型,是创建变量的模板,不占用内存空间;结构体变量才包含了实实在在的数据,需要内存空间来存储
2.结构体的简单使用
(1)定义&声明
方式一:声明一个名为ling的person结构体变量
struct person{
char *name;
char *sex;
int age;
};
person ling;
方式二:或在定义时,声明ling 变量
struct person{
char *name;
char *sex;
int age;
} ling;
(2)结构体变量读取与赋值
赋值方式一:结构体赋值可以在定义变量是整体赋值,
整体赋值仅限于定义结构体变量的时候,在使用过程中只能对成员逐一赋值
struct{
char *name; //姓名
int num; //学号
int age; //年龄
char group; //所在小组
float score; //成绩
} stu1, stu2 = { "Tom", 12, 18, 'A', 136.5 };
赋值方式二:也可以在定义后分别赋值
struct person{
char *name;
char *sex;
int age;
} ling;
ling.name = "lingcb";
ling.sex = "man";
ling.age = "19";
渎值方式一:
struct person{
char *name;
char *sex;
int age;
} ling;
ling.name = "lingcb";
ling.sex = "man";
ling.age = "19";
cout<<"name:"<<ling.name<<endl;
cout<<"sex:"<<ling.sex<<endl;
cout<<"age:"<<ling.age<<endl;
参考
【1】C语言指针是什么?1分钟彻底理解C语言指针的概念
【2】让你不再害怕指针——C指针详解(经典,非常详细)
【3】C语言结构体详解,C语言struct用法详解