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{
以下两个常量可以用来做整型的取最大值和最小值:
INT_MAX // 整型中可以出现的最大值
INT_MIN // 整型中可以出现的最小值
结构体数组和指针:
Student stu[5] = {
数组名就是指针,指向数组的首地址,也是数组首个元素的地址
*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));
结构体指针: 就是指向结构体变量的指针
结构体的首地址,就是结构体第一个成员变量的首地址
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));
相关文章推荐
- iOS——指针进阶
- iOS——内存动态分布
- iOS——函数
- iOS——指针
- iOS——结构体
- iOS——一维数组
- ios开发常用的宏定义
- iOS开发中的公共方法
- 对iOS锁的一些研究
- iOS同步对象性能对比(iOS锁性能对比)
- iOS Provisioning Profile(Certificate)与Code Signing详解
- iOS如何在多台机器上共享iOS证书
- iOS 9下的shareSDK集成的常见问题及解决方案
- animation - 6
- iOS SEL的简单总结
- iOS并发编程-锁
- iOS 开始页面实现
- iOS代码混淆
- IOS Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等
- iOS进程与线程的区别