指针
指针在函数中的使用
交换两个变量的值(函数)
void swap(int m, int n); void swap(int m, int n){ int temp = 0; temp = m; m = n; n = temp; } int a = 5, b = 10; swap(a, b); printf("a = %d b = %d ", a, b);//a 和 b没有交换,交换的是m n
a 和 b没有交换,交换的是m n
如果想要在函数内部修改函数外部定义的变量, 就需要传递指针
void swapPro(int *p1, int *p2); void swapPro(int *p1, int *p2){ int temp = *p1; *p1 = *p2; *p2 = temp; } swapPro(&a, &b); printf("a = %d b = %d ", a, b);
写一个冒泡排序的函数
void bubble(int a[], int count); void bubble(int a[], int count){ for (int i = 0; i < count - 1; i++) { for (int j = 0; j < count - 1 - i; j++) { if (a[j] > a[j + 1]) { //1. int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; //2. // int temp = *(a + j);; // *(a + j) = *(a + j + 1); // *(a + j + 1) = temp; //3. //swapPro(a + j, a + j + 1); //4. //swapPro(&a[j], &a[j + 1]); } } } } //打印数组的函数 void printArray(int *p, int count); void printArray(int *p, int count){ for (int i = 0; i < count; i++) { printf("%d ", *(p + i)); } printf(" "); } int array[5] = {2, 3, 5, 4, 1}; bubble(array, 5); printArray(array, 5);
指针在结构体中的使用
结构体声明
struct student{ char name[20]; char gender; int age; };
对结构体重命名
//定义结构体变量 Student stu = {"zhangsan", 'f', 18}; //访问结构体里的成员变量(点语法) printf("%s ", stu.name); printf("%c ", stu.gender); printf("%d ", stu.age);
结构体变量所占的字节数
printf("%lu ", sizeof(Student));//28
printf("%p ", &stu); //定义结构体指针变量, 存结构体变量的首地址 Student *p = &stu; //*p 取到结构体变量stu printf("%s ", (*p).name); printf("%c ", (*p).gender); printf("%d ", (*p).age);
有了结构体变量的首地址, 可以使用->(指向操作符)访问成员变量
printf("%s ", p->name); printf("%c ", p->gender); printf("%d ", p->age);
定义一个点坐标的结构体CPoint,包含两个float 成员x,y。
1.定义两个CPoint结构体变量m,n
2.使用两个结构体指针分别指向m,n
3.然后通过指针计算两点距离(提示:1、勾股定理,2、开方函数sqrt)
typedef struct{ float x; float y; }Cpoint; Cpoint m = {6.0, 4.0}; Cpoint n = {2.0, 1.0}; Cpoint *pm = &m; Cpoint *pn = &n; //m.x - n.x //(*pm).x - (*pn).x float distance = sqrt((pm->x - pn->x) * (pm->x - pn->x) + (pm->y - pn->y) * (pm->y - pn->y)); //powf: 平方函数 //float distance = sqrt(powf((pm->x - pn->x), 2) + powf((pm->y - pn->y), 2)); printf("两点距离: %.2f ", distance);
把下面结构体变量中的名字中的空格改成下划线
Student stu1 = {"zhang san feng", 'm', 999};
//结构体声明 struct student{ char name[20]; char gender; int age; }; //对结构体重命名 typedef struct student Student; //把下面结构体变量中的名字中的空格改成下划线 Student stu1 = {"zhang san feng", 'm', 999}; //1 strcpy(stu1.name, "zhang_san_feng"); //2 stu1.name[5] = '_'; stu1.name[9] = '_'; //3 for (int i = 0; i < strlen(stu1.name); i++) { if (stu1.name[i] == ' ') { stu1.name[i] = '_'; } } //4 int i = 0; while (stu1.name[i] != '