C语言指针和结构体

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

c 语言归纳

结构体

1.结构体类型定义

#definen STUDENT struct student

student

{ int nun ;

char name[20] ;

char sex ;

int age ;

float score ;

char addr[30];

};

2.结构体变量定义

方式一: STUDENT student1 ,student2;

方式二: struct student

{ int nun ;

char name[20] ;

char sex ;

int age ;

float score ;

char addr[30];

} student1 ,student2 ;

3.结构体类型变量的引用

错误方式:printf(“%d %s %c %d %f %s\n”,student1) ;

正确方式: ①结构体变量名.成员名②(*p)->成员名③p->成员名

例:student1.num=1001 ;

4.结构体变量初始化

main()

{ struct student

{int num ;

char name[20] ;

char sex ;

char addr[30];

} a={ 89031 ,”li xiao” ,’m’ ,”101 beijing road “};

printf(“no:%ld\n name:%s\n sex:%c\n address:%s\n”,a.num,,a.sex,a.addr);

5.用typedef定义类型

typedef 已有类型新定义类型

例:typedef int COUNT ;

typedef student STD ;

指针

直接访问:按变量地址存取变量的方法;

间接访问:变量地址存放在另一个内存单元中;

指针:即一个变量的地址;

指针变量:一个专门存放另一个变量地址;

定义方法:

int i , j ;

int *pointer1 , *porinter2;

指针变量赋值: pointer1=&I ; pointer2=&j ;

3

地址2000

3

地址:2000

指针变量引用:

(1)&取地址运算符例&a为变量a的地址

(2)*指针运算符(间接访问)例*p为指针变量p所指向的变量

*&a=a ( *poinrer1) ++ 相当于a++

指针运算用于数组

p=&a[0] 指向数组第一个元素

p=a 同上;

定义时int *p=a;

“数组的指针”是指数组的起始地址;

“数组元素的指针”是指数组元素的地址;

C语言规定p+1就是指向数组下一个元素

(1)p+I ;a+I 就是a[I]的地址,指向a数组第I个元素

(2)* (p+I) 或* (a+I),是p+I或a+I 指向的数组元素a[I](其中a为数组a的首地址)

(3)指向数组的指针变量也可以带下标,如p[I]等价于* (p+I)

引用数组元素的方法

下标法: a[I] 指针法: * (a+I) 或* (p+I)

(a)* (p++) 先取*p值再指针p+1

(b)* (++p) 先使指针p+1,再取*p的值

例p初值为a ; (a)语句得a[0]的值; (b)语句得a[1]的值

(c) (*p)++表示p指向元素值+1 ( 即a[0]++ 如a[0]=3则a[0]=4)

(d)*(p--)相当于a[I - -] ,先取p值作”*”运算,再p自减1

(e)*(++p)=a[++I ]即先p自加1 ,再作*运算

指针小结

定义int I 定义整型变量I ;

int *p p为指向整型数据的指针变量

int a[n] 定义整型数组a有个n元素;

int *p[n] 定义指针数组p,它由n个指向整型数据的指针元素组成

int (*p)[n] p为指向含有n个元素的一维数组的指针变量;

int f( ) f 为带回整型函数数值的函数

int *p( ) p为指向一个指针的函数,该指针指向整型数据

int **p p是指针变量,它指向一个指向整型数据的指针变量;

int (*p)( ) p为指向函数的指针,该函数返回一个整型值

main()

{ int max(int , int );

int (*p) ( ) /*指向函数的指针变量*/

int a,b,c ;

p=max; /*P指向max函数入口地址*/

scanf(“%d %d “,&a,&b);

c= (*p)(a , b); /*相当于c=max(a , b ) ;

printf(“%d,%d,%d”, a , b , c) ; /*请问printf(“%d,%d,%d”, a , b ,max) ; (错) } printf(“%d,%d,%d”, a , b ,*p) ; (错)

printf(“%d,%d,%d”, a , b ,max(a,b)) ;对

printf(“%d,%d,%d”, a , b ,(*p)( ) ) ; 对*/ max( int x, int y)

{ int z ;

if (x>y) z=x;

else z=y;

return (z);

}

指针变量常用运算: p++ ,p—p+I , p-I , p - = I

指针变量赋值:

p=&a 将变量a的地址赋给p

p=array 将数组array首地址赋给p

p=&array[I] 将数组array第i个元素地址赋给p

p=max max 为已定义函数,将max的入口地址送给p

p1=p2 指针变量传递

注意: p=1000(错) I=p (错)

#define NULL 0

p=NULL (对的)

指针变量相减

例p1指向a[1] ; p2指向a[4] 而p2-p1=4-1=3表示两指针间元素个数

指针变量相加:无意义

宏定义

不带参数的宏定义(指定一个名字,来代表一个字符串)

#define 标识符字符串例#define PI 3.1415169

#undef 标识符; 结束宏定义作用域

带参数的宏定义

格式: #define 宏名(参数表) 字符串

例#define S( a,b) a*b

arae =S(3,2) 即: area=3*2

一般用宏代表简短表达式:

#define MAX(x,y) (x)>(y)?(x) : (y)

main()

{ int a , b , c , d , t ;

相关文档
最新文档