C语言程序设计笔记---007
C语言初识指针和结构体
1、了解内存
前言:
内存:通常指的就是主板上的存储部件,CPU直接与之沟通。如:1kb 1MB 8G 16G 32G…
生活中:
人们处于一个大环境的空间里,比如想去某个景点旅游,那么就会对应有一个地理位置,根据地理位置导航便可前往准确的位置。
所以内存也相当于一个空间,那么我们如何使用这个内存空间呢?
/知识点汇总/
2、C语言指针
概念:指针也就是内存地址,指针变量是用来存放内存地址的变量。
注意在同一CPU构架下:
(1)不同类型的指针变量所占用的存储单元长度是相同的。
(2)而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。
(3)有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。
2.1、指针指向首地址/指针变量例程:
/*例程2.1*/
#include <stdio.h>
int main()
{
int a = 10;//将整型数据a分配内存空间--4个字节
//&a :获取a所分配在内存空间中的地址
//注意:&a取的是第一个字节的地址,得到第一个首地址,自然推出剩余地址
printf("&a = %p\n",&a);//%p常用于打印地址的格式符
//当我们想把得到的地址存放起来,
//则可以用一个变量,作为空间来存放,这个变量叫指针变量
int* pa = &a;//此时用pa来存放a的地址,为指针变量
//int* //*作用:告诉计算机pa为一个指针变量
//int 说明pa指向的对象为a---int整型,即:通常与对象类型相同
printf("pa = %p\n", pa);
//同理
char b = 'A';
printf("&b = %p\n", &b);
char* ad = &b;
printf("ad = %p\n",ad);
return 0;
}
辅助图:
2.2、指针的解引用操作
/*例程2.2*/
#include <stdio.h>
int main()
{
int a = 10;
int* pa = &a;
*pa = 20;//单独的*+指针变量时,*为解引用操作
//即:*pa就是通过访问pa里边的地址,找到a
printf("%d\n",a);//20
return 0;
}
辅助图:
2.3、指针的大小
a、编译后发现指针大小相同
b、为什么会相同?
c、首先指针是用来存放地址的
d、指针需要多大的空间取决于存放数据的变量地址的存储需要多大的空间
e、32位—32 bit—4 Byte,64位—64 bit—8 Byte 满足需要即可
/*例程2.3*/
#include <stdio.h>
int main()
{
printf("数据类型大小\n");
printf("%d\n",sizeof(char));
printf("%d\n", sizeof(short));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(long));
printf("%d\n", sizeof(long long));
printf("%d\n", sizeof(float));
printf("%d\n", sizeof(double));
printf("指针类型大小\n");
printf("%d\n", sizeof(char*));
printf("%d\n", sizeof(short*));
printf("%d\n", sizeof(int*));
printf("%d\n", sizeof(long*));
printf("%d\n", sizeof(long long*));
printf("%d\n", sizeof(float*));
printf("%d\n", sizeof(double*));
return 0;
}
辅助图:
3、C语言结构体
a、结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型(多种数据类型)。
b、结构体可以使C语言创建新的类型
c、就是用不同类型的数据来描述一个数据对象。
3.1、创建一个书的类型
/*例程3.1*/
#include <stdio.h>
//创建一个书的类型
struct book
{
char name[20];
float price;
char id[30];
};
int main()
{
return 0;
}
3.2、结构体描述学生的信息例程
/*例程3.2*/
#include <stdio.h>
//创建一个学生类型
struct student
{
char name[20];//结构体的成员--成员变量
int age;
char sex[5];//[5]是指给sex成员变量存放的内存空间
double id;
};
int main()
{
struct student s = {"张三",20,"男",123456.789};//结构体的创建与初始化
//s是结构体名
//.操作符,读取结构体变量
printf("%s %d %s %lf \n",s.name,s.age,s.sex,s.id);//结构体变量,成员变量
//%lf双精度浮点型格式符
//结构体指针
struct student* ps = &s;//用指针变量ps来存放结构体名的地址,类型对应相同
//*作用:告诉计算机ps为一个指针变量
//struct student 说明ps指向的对象为s---结构体型,即:指针类型与所指的对象类型相同
printf("%s %d %s %lf \n",(*ps).name,(*ps).age,(*ps).sex,(*ps).id );
//(*ps) = s
//用*ps解引用+'.'操作符,直接读取结构体对应的结构体成员变量
//->操作符,格式:结构体的指针->成员变量名
printf("%s %d %s %lf \n", ps->name, ps->age, (*ps).sex, (*ps).id);
//ps-> == (*ps).
return 0;
}