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用法详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值