指针的三个要素
数据类型标识符
1.任何可以在程序中分配的内存空间(除了内存管理函数malloccalloc申请的空间)都必须是定义变量。
定义变量必须采用符合数据类型的变量名格式。
2.如何确定变量的数据类型?
1)首先确定变量名,符合标识符的命名规则。
2)去掉变量名,剩下的就是变量的数据类型。
数据类型[长度]-gt数组类型
数据类型*-gt指针类型
数据类型(参数列表)-gt函数类型
在数组的声明中,除了数组名[length]之外,其余都是数组元素的类型。
在指针的声明中,除了*指针名,其余都是指针所指向对象的类型。
在函数的声明中,除了函数名(参数列表),其余都是函数返回值类型。
3.在复杂数据类型的定义中,符号*[]()用作运算符。根据运算符的优先级和结合性,确定标识符优先与谁结合,那么是谁呢?
identifier[length]-gt数组,剩下的就是数组元素的类型。
*identifier-gtpointer是指针指向的对象的类型。
标识符(参数列表)-gt函数留有函数返回值类型。
char*name[20]
//优先级组合,-gtname[20]-gt数组
//去掉name[20]剩下的就是数组元素的类型char*-gt指针类型。
//指针数组
char(*name)[20]
//优先级组合,*名称优先级组合,-gt指针
//去掉*name,剩下的就是指针指向的对象的类型-gtchar[20]-gt数组类型。
//数组指针
char(*name)(int)
//优先级组合,*名称优先级组合,-gt指针
//去掉*name,剩下的就是指针指向的对象的类型-gtchar(int)-gt函数类型。
//函数指针
char*name(int)
//优先级组合-gt名称(int)-gt函数
//去掉名字(int)剩下的就是函数的返回值类型char*-gt指针。
//指针函数
字符名称[3][4]
//优先级组合:name[3]-gt数组
//去掉名字[3]剩下的就是数组元素的类型char[4]-gt数组类型。
//是的,元素类型是数组类型。-gt二维数组的数组
intfun[5]//fun
//定义int[5]类型的变量,int[5]-gt数据类型[长度]-gt数组类型。
//定义数组类型的变量fun。
char*p//p
//指示定义char*类型的变量pchar*-gt数据类型*-gt指针类型。
int测试(int,int)
//测试
//int(int,int)-gt数据类型(参数列表)-gt函数类型。
指针名:指针名-gt变量名,符合标识符的命名规则。
指针类型:去掉指针名,剩下的就是指针类型(去掉变量名,剩下的就是变量的数据类型)。
指针所指向对象的类型:在指针的声明中,除了*指针名,剩下的就是指针所指向对象的类型。
指针的大小是固定的,这是由指针本身的大小决定的,与指针所指向的对象的类型无关。
指针的偏移量实际上是由定义指针时指针所指向的对象的类型决定的,而不是由指针实际指向的对象的类型决定的。
intmain(){inta100//整数变量aint*pampachar*pfampaprintf(#34%#p
#34,p)printf(#34%#p
#34,第1页)printf(#34%#p
#34,pf)printf(#34%#p
#34,pf1)返回0}
p1//地址前移
注意:
int*p//如果指针是在函数内容中定义的,
intmain(){int*p//指针类型的局部变量//如果没有初始化,系统默认为随机值//指针指向不明确//如果指针只在开头定义,没有赋值,指针就应该留空//int*pnull//don;t让指针指向任何地方//wildpointer:指针指向不明确,要用pointer*p100。通配符指针会导致程序崩溃。返回0
相关资源:c语言指针总结_c语言指针实验报告经验,c语言指针总结经验-c文档类...
我a;
去做吧。