您的位置:首页 > 移动开发 > IOS开发

iOS——结构体指针

2015-12-28 19:37 465 查看
小总结: 什么类型的指针,就是这个指针指向什么类型的变量

结构体指针: 就是指向结构体变量的指针

结构体的首地址,就是结构体第一个成员变量的首地址

stu *p = NULL;

stu s1 = {“lizongrui”,18,’m’};

p = &s1;

printf(“%p\n”,p);

printf( “%p\n”,&s1 );

printf( “%p\n”,&s1.name); // 打印的结果相同,都是首地址

printf(“%s\n”,s1.name); // lizongrui

// *p1 等价于 s1

int *p1 = NULL

int a= 20;

p1 = &a; // 此时,*p1等价于 a

printf(“%d\n”,(*p).age);

// 指向操作符 ->

// -> 前面只能是结构体指针变量,而且必须是指向结构体变量首地址的结构体变量

printf( %d\n”,p->name);

//练习: 1.定义一个老师结构体

//2.创建结构体变量

//3.创建结构体指针指向结构体变量

//4.判断如果老师名字的首字符不是大写,改为大写,并且将其年龄+10岁;如果首字符是大写,年龄-10;

/* Teacher teacher1 = {“Xiangge”,30,”avmovie”};

Teacher *t = &teacher1;

if (t->name[0] >= ‘a’ && t->name[0] <=’z’ ) {

// t->name 是name的首字符地址,而这里是需要进行字符的判断,需要标明第几个字符。

t->name[0] -= 32;

t->age += 10;

}

else{

t->age -= 10;
}

printf("%s %d %s\n",t->name,t->age,t->hobby);


以下两个常量可以用来做整型的取最大值和最小值:

INT_MAX // 整型中可以出现的最大值

INT_MIN // 整型中可以出现的最小值

结构体数组和指针:

Student stu[5] = {

{1,"guanXi",'m',19,90},
{3,"tingfeng",'m',20,91},
{2,"bozhi",'w',18,99},
{5,"lizongrui",'y',30,59},
{4,"zhaosi",'y',40,100}

};


数组名就是指针,指向数组的首地址,也是数组首个元素的地址

*stu 等价于 stu[0]

*(stu+1) 等价于 stu[1]

··· ···

访问数组中的元素的姓名成员变量

(*stu).name = stu[0].name

( (*stu+1) ).name = stu[1].name

··· ···

使用指针操作符 -> 来访问数组中元素

stu-> name = stu[0].name

( stu+1)->name = stu[1].name

( stu+2 )->name = stu [2].name

··· ···

printf( (stu+3)->name,”ajiao”);

printf(“%s\n”,(stu+3)->name);

// 定义一个指向结构体数组

Student *p1 = stu;

printf(“%s\n”,p1[0].name);

printf(“%s\n”,p1->name);

printf(“%s\n”,(*p1).name); // 输出结果相同

指针数组 数组中的元素都是指针(地址)

int a = 3,b = 4,c = 5,d = 6;

int p1 = &a;// &a 的类型就是 int

int array[4] = {&a,&b,&c,&d}; // 由于数组中每个元素的类型都是int ,所以数组的类型也应是int *

printf(“数组所占内存大小:%lu\n”,sizeof(array));

//访问数组中的元素

// 方式一

printf(“%p\n”,array[0]); //由于数组中的元素地址,所以使用%p.

printf(“%p\n”,&a);

printf(“%p\n”,array[1]);

// 方式二

printf(“%p\n”,*array);

printf(“%p\n”,*(array+1));

// 访问指针数组中元素指向内存空间里存储的值
printf("%d\t",*array[0]);
printf("%d\t",*array[2]);
printf("%d\t",*array[3]);
printf("%d\n",*array[1]);

printf("%d\t",*(*array));  // *array  取出的是地址  **array  才是取出地址所指向的值
printf("%d\t",**(array+1));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: