指针 代码 #include <stdio.h>int main(){int a = 10;//指针类型需要与变量的类型相同,且后面需要添加一个*符号(注意这里不是乘法运算)表示是对于类型的指针int * p = &a; //这里的&并不是进行按位与运算,而是取地址操作,也就是拿到变量a的地址printf("a在内存中的地址为:%p\n", p); //地址使用%p表示printf("a的值为:%d\n",*p); //*是指将p地址的值取出来// 通过指针修改值*p = 777;printf("*p修改后的值为:%d\n", *p);printf("a的值为:%d\n", a); //a的值也被修改为777,以为是同一个地址//数组指针char str[] = "Hello World!";printf("数组表示法:%c\n", str[1]); //数组表示法,输出数组第二个字符char * pp = str;printf("第一个元素值为:%c,第二个元素值为:%c", *pp, *(pp+1)); //指针表示法,通过指针也可以表示对应位置上的值} 运行效果 结构体 代码 #include <stdio.h>//定义结构体 struct Student { //使用 (struct关键字 + 结构体类型名称) 来声明结构体类型,这种类型是我们自己创建的(同样也可以作为函数的参数、返回值之类的)int id; //结构体中可以包含多个不同类型的数据,这些数据共同组成了整个结构体类型(当然结构体内部也能包含结构体类型的变量)int age;char *name; //用户名可以用指针指向一个字符串,也可以用char数组来存,如果是指针的话,那么数据不会存在结构体中,只会存放字符串的地址,但是如果是数组的话,数据会存放在结构体中 };//函数 void test(struct Student * student){ //这里使用指针,那么现在就可以指向外部的结构体了student->age = 19; //别忘了指针怎么访问结构体内部数据的 }int main() {//定义结构体,stu是结构体变量struct Student stu = {.id=1,.age=18,.name="小明"};printf("%d,%d,%s\n", stu.id,stu.age,stu.name);//结构体指针,赋值传递struct Student student = {1, 20, "小红"};struct Student * p = &student; //同样的,类型后面加上*就是一个结构体类型的指针了printf("%d\n",(*p).age);//输出方式,两者是一样的printf("%s\n", (*p).name); //由于.运算符优先级更高,所以需要先使用*p得到地址上的值,然后再去访问对应数据printf("%s\n", p->name); //使用 -> 运算符来快速将指针所指结构体的对应数据取出//结构体函数struct Student s = {1, 77, "小新"};test(&s); //传递结构体的地址过去printf("%d\n", s.age); } 运行效果