iOS——结构体指针

来源:互联网 发布:cf领枪软件下载 编辑:程序博客网 时间:2024/05/12 18:37

小总结: 什么类型的指针,就是这个指针指向什么类型的变量

结构体指针: 就是指向结构体变量的指针
结构体的首地址,就是结构体第一个成员变量的首地址
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));
0 0
原创粉丝点击