c语言变量的3要素,【分享】C语言学习分享-指针的三要素轻松搞定指针学习

本文详细解析指针的三要素(数据类型、标识符和指向对象),并通过实例说明如何确定变量类型,包括数组、指针和函数类型。重点讲解了复杂数据类型表达式中的优先级规则。通过代码示例演示了指针运算符的结合性和应用。
摘要由CSDN通过智能技术生成

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

1.1 指针的三要素

数据类型 标识符

1. 凡是在程序中可以分配内存空间(除了内存管理函数 malloc calloc申请空间以外),一定是在定义变量,

定义变量一定是符合 数据类型变量名 格式

2. 如何确定变量的数据类型?

1)先确定变量名,变量名符合标识符的命名规则

2)去掉变量名,剩下的就是变量的数据类型

数据类型 [长度]--->数组类型

数据类型 *-------->指针类型

数据类型 (参数列表)----->函数类型

在数组的声明中,除了 数组名[长度] 剩下的就是数组元素的类型

在指针的声明中,除了 *指针名 剩下的就是指针指向的对象的类型

在函数的声明中,除了 函数名(参数列表) 剩下的就是函数返回值类型

3. 在复杂数据类型的定义中,带有 * [] () 符号, 将其当做运算符,根据运算符的优先级和结合性,确定标识符优先跟谁结合,那么就是谁?

标识符[长度]----->数组 , 剩下的就是数组元素的类型

*标识符 ------>指针 剩下的就是指针指向的对象的类型

标识符(参数列表)---->函数 剩下的就是函数返回值类型

char *name[20];

//优先结合,---->name[20]---->数组

//去掉 name[20] 剩下的就是数组元素的类型 char *--->指针类型

//指针数组

char (*name)[20];

// 优先结合, *name 优先结合,---->指针

//去掉 *name ,剩下的就是指针指向的对象的类型 --->char [20]---->数组类型

//数组指针

char (*name)(int);

//优先结合, *name 优先结合,---->指针

//去掉 *name ,剩下的就是指针指向的对象的类型 --->char (int)---->函数类型

//函数指针

char *name(int);

//优先结合---->name(int)----->函数

//去掉 name(int) 剩下的就是函数的返回值类型 char *------>指针

//指针函数

char name[3][4];

//优先结合:name[3]----->数组

//去掉 name[3] 剩下的就是数组元素的类型 char [4]--->数组类型

//是元素类型为数组类型的数组,---->二维数组

int fun[5]; //fun

//定义 int [5] 类型的变量 , int [5] ---> 数据类型 [长度]--->数组类型

//定义数组类型的变量 fun

char *p; //p

//表示定义 char *类型的变量p char *------>数据类型 *-------->指针类型

int test(int , int);

//test

//int (int , int)---->数据类型 (参数列表)----->函数类型

指针名:指针名--->变量名,符合标识符的命名规则

指针的类型:去掉指针名,剩下的就是指针的类型,(去掉变量名,剩下的就是变量的数据类型)

指针指向的对象的类型:在指针的声明中,除了 *指针名 以外剩下的就是指针指向的对象的类型

指针的大小固定的,由指针本身的大小决定,跟指针所指向的对象的类型无关

指针的偏移实际上由定义指针时指针指向的对象的类型决定,而不是由实际上指针指向的对象的类型决定

int main(){int a = 100; //整型变量aint *p = &a;char *pf = &a;printf("%#p\n",p);printf("%#p\n",p+1);printf("%#p\n",pf);printf("%#p\n",pf+1);return 0;}

p+1; //地址的前移

注意:

int *p; //如果指针定义在函数内容,

int main(){int *p; //指针类型的局部变量 //如果没有初始化,则系统默认赋值为随机值 //指针指向不明确//如果指针一开始只定义,不赋值,应当将指针置空//int *p = NULL; //不让指针指向任何一个地方//野指针: 指针的指向不明确,而使用指针*p = 100; //野指针。野指针会导致程序运行崩溃return 0;}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值