一、UI设计
1.原型设计中叠加的使用
选中某个图标在原型操作类型中选择叠加,即可实现页面返回
例如:网易云中左上角菜单栏的设置
2.超链接的使用
选中某个图片图标或视频在原型操作中选择超链接,即可实现从此页面跳转到某个网页
例如:某些app中跳转到其他app或某些下载页面(此处以抖音跳转下载某游戏为例)
3.一些有关ui设计的网站分享(下面链接的文章中)
http://t.csdnimg.cn/CPruC http://t.csdnimg.cn/a0uA6
二、C语言复习
(更详细的文章链接:http://t.csdnimg.cn/ruFgP http://t.csdnimg.cn/yI7KW)
1.指针变量的定义和初始化
指针是一个变量,用来存储内存地址。通过使用指针,我们可以访问和修改内存中的数据。指针的声明和初始化如下所示:
int* ptr; // 声明一个整型指针
int num = 10; ptr = # // 指针指向num变量的地址
tip:指针使用需要初始化,避免忘记对其初始化给系统带来潜在危险,我们可以将其初始化为NULL
2.指针作函数参数的参数传递方式
在C语言中,可以通过指针作函数参数的方式来实现对函数外部变量的修改。指针作函数参数时,参数传递方式有两种:传值和传址。
(1)传值
在传值方式中,函数接收的是被调用者传递过来的实参变量的一个副本,即形参变量。也就是说,在函数内部对形参所做的任何修改都不会影响到实参。例如:
void swap(int a, int b) { // 传值方式
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 10, y = 20;
swap(x, y);
printf("x = %d, y = %d\n", x, y); // 输出 x = 10, y = 20
return 0;
}
在上面的例子中,swap
函数以传值的方式接收x
和y
的值,并在函数内部进行交换。但是,在main
函数中,x
和y
的值并没有发生变化,因为swap
函数只是修改了它们的副本。
(2)传址
在传址方式中,函数接收的是实参变量的地址,即指向实参的指针。这样,在函数内部修改的是实参变量的值,而不是副本。例如:
void swap(int* a, int* b) { // 传址方式
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 10, y = 20;
swap(&x, &y);
printf("x = %d, y = %d\n", x, y); // 输出 x = 20, y = 10
return 0;
}
在上面的例子中,swap
函数以传址的方式接收x
和y
的地址,并通过解引用操作来修改它们的值。在main
函数中,x
和y
的值已经被成功交换了。
tip:在使用指针作函数参数时,需要确保指针所指向的变量已经在函数调用之前被正确地声明和初始化。同时,也需要注意对指针的解引用操作,以避免出现指针未初始化或指向无效内存地址的问题。
3.函数指针及其应用
函数指针就是指向函数的指针,指向函数的指针变量中存储的是一个函数在内存中的入口地址
类比:一个数组名其实就是存储数组第一个元素的内存地址,同理可知,一个函数名就是这个函数的源代码爱内存中的起始地址,编译器将不带()的函数名解释为该函数的入口地址。
应用实例:使用函数指针的排序算法来对30名学生的成绩进行排序
#include <stdio.h>
typedef struct {
char name[20];
int score;
} Student;
int compareByScore(Student* s1, Student* s2) {
return s1->score - s2->score;
}
void bubbleSort(Student arr[], int size, int (*compare)(Student*, Student*)) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (compare(&arr[j], &arr[j + 1]) > 0) {
Student temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void printStudents(Student arr[], int size) {
for (int i = 0; i < size; i++) {
printf("Name: %s, Score: %d\n", arr[i].name, arr[i].score);
}
}
int main() {
Student students[30];
int size = sizeof(students) / sizeof(students[0]);
printf("Please enter the names and scores of 30 students:\n");
for (int i = 0; i < size; i++) {
printf("Student %d:\n", i+1);
printf("Name: ");
scanf("%s", students[i].name);
printf("Score: ");
scanf("%d", &students[i].score);
}
printf("\nBefore sorting:\n");
printStudents(students, size);
bubbleSort(students, size, compareByScore);
printf("\nAfter sorting:\n");
printStudents(students, size);
return 0;
}
4.指针数组和数组指针
(1)指针数组
指针数组是一个数组,其中的每个元素都是指针。它允许我们存储多个指针,并对它们进行操作。下面是指针数组的声明和初始化的示例:
int* arr[5]; // 声明一个包含5个整型指针的数组
int num1 = 10, num2 = 20, num3 = 30;
arr[0] = &num1;
arr[1] = &num2;
arr[2] = &num3;
(2)数组指针
数组指针是一个指针,用来指向数组的首地址。通过使用数组指针,我们可以通过指针来访问数组元素。下面是数组指针的声明和初始化示例:
int arr[5] = {1, 2, 3, 4, 5};
int (*ptr)[5]; // 声明一个指向包含5个整型元素的数组的指针
ptr = &arr; // 指针指向数组arr的首地址