目录

C语言

一、#define

1.定义标识符常量

2.定义宏 

二、指针变量

指针变量的用法

解引用操作符

指针变量的大小

 说明:

三、结构体

定义一个结构体

使用结构体

直接使用结构体

与指针变量相结合使用 

法一:

法二:


C语言

注:一下所写均为新了解的知识并非整体的知识总结

一、#define

1.定义标识符常量

例:

#define NUM 100

int main()
{
    int arr[NUM] = { 0 };//此处的NUM是一个值不是变量,可以在数组定义时使用
	int n = NUM;
	printf("%d\n", n);

	return 0;
}

输出结果:

100

2.定义宏 

宏是有参数的

例:

#define ADD(x,y) ((x)+(y))

int main()
{
	int a = 10;
	int b = 20;
	int c = ADD(a, b);
	printf("%d\n", c);
	return 0;
}

输出结果:

30

二、指针变量

指针变量的用法

定义一个变量

int a = 10;

利用&符号即可取出该变量的地址

&a ; 

定义一个指针变量p用来存放变量a的地址数据

int* p = &a; 

此定义中p是指针变量,用于存放地址数据,*是说明p是指针变量,int说明指向的对象是int类型的。

特别注意:

int* p1, p2, p3;

此时三个变量中只有p1被定义为指针变量,p2、p3只是普通的int类型 。

int *p1, *p2, *p3

此时的三个变量才会都被定义为指针变量。

解引用操作符

利用*符号可以解引用操作,意思是通过p存放的地址,找到p指向的对象,*p就是p指向的对象, *p = 20;即将20赋值给p指向的对象变量a。

*p = 20;


int main()
{
	int a = 10;//申请四个字节存放数据10 
	&a;//取地址操作符
    printf("%p\n", &a);
	int* p = &a;
	*p = 20;//解引用操作符,意思是通过p中存放的地址,找到p所指向的对象,*p就是p指向的对象
	printf("%p\n", p);
    printf("%d\n", a);

	return 0;
}

每次输出的地址可能都不相同,原因是每次运行代码时,编译器会自动给变量分配地址,每次分配的地址都是随机的。 

指针变量的大小

可以利用sizeof函数读出指针变量的大小

printf("%zu ", sizeof(char*));
printf("%zu ", sizeof(short*));
printf("%zu ", sizeof(long*));
printf("%zu ", sizeof(int*));
printf("%zu ", sizeof(float *));
printf("%zu ", sizeof(double*));

输出结果 

①若为32位机器则输出

4 4 4 4 4 4 

②若为64位机器则输出

8 8 8 8 8 8 

 说明:

  • 指针变量的大小取决于一个地址存放需要多大的空间,32位机器的地址有32bit,即4字节,对应输出4。64位机器的地址有64bit,即8字节,对应输出8。

三、结构体

  •   结构体是将单一的类型组合在一起的用法

定义一个结构体

struct Stu        //Stu是结构体对象名

{

        //结构体成员

        char name[20];

        int age;
        char sex[10];
        char tele[12];

};

 Stu为结构体对象名,可以自定义

变量name、age、sex、tele为结构体成员

使用结构体

直接使用结构体

struct Stu    //Stu是结构体对象名
{
	//结构体成员
	char name[20];
	int age;
	char sex[10];
	char tele[12];
};

int main()
{
    struct Stu s = { "张三",20,"男","155****8862" };//定义一个结构体变量s,并赋值

    //结构体使用:结构体对象.成员名
    printf("%s %d %s %s\n",s.name,s.age,s.sex,s.tele);

    //结构体成员输出顺序可调整,但需确保数据类型与输出符号严格匹配。


    return 0;
}

与指针变量相结合使用 

法一:

使用解引用符号用(*ps)代替结构体变量s

struct Stu    //Stu是结构体对象名
{
	//结构体成员
	char name[20];
	int age;
	char sex[10];
	char tele[12];
};

int main()
{
    struct Stu s = { "张三",20,"男","155****8862" };//定义一个结构体变量s,并赋值

    struct Stu* ps = &s;
    
    printf("%s %d %s %s\n", (*ps).name, (*ps).age, (*ps).sex, (*ps).tele);
    //*ps就是ps指向的对象,即结构体变量s。

    return 0;
}
法二:

直接利用指针变量的属性,指针变量指向成员名调用结构体

struct Stu    //Stu是结构体对象名
{
   
	//结构体成员
	char name[20];
	int age;
	char sex[10];
	char tele[12];
};

int main()
{
    struct Stu s = { "张三",20,"男","155****8862" };//定义一个结构体变量s,并赋值

    struct Stu* ps = &s;
    
    printf("%s %d %s %s\n", ps->name, ps->age, ps->sex, ps->tele);
    //结构体指针变量->成员名

    return 0;
}

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐