1.0 右移操作 vs 除法运算
右移操作在某些情况下比普通的除法运算更高效,尤其在嵌入式系统或对性能要求较高的场合,通常会用位移操作来代替除法运算。
1.1 数组的几种声明形式
int a[3]; //初始值是不确定的,随机的;
int a[3] = {0}; //数组中的三个数据都初始化为0;
int a[] = {1,2,3};
int a[3] = {1,2,3};
char character[3] = {'a', 'b', 'c'};
char character[3] = {'a'}; //将数组的第一个元素初始化为 'a',而剩下的两个元素会被默认初始化为 '\0'(空字符)
char string1[20] = "its a string"; //这种字符串被称为字符串常量,将字符串读入到char数组的时候会自动的加上结尾的空字符。
5.指针数组和数组指针,int *p[3] 和 int p[3] 和 int (*p)[3] 的区别?
1. int *p[3]
//数组指针,p是一个数组,包含三个元素,每个元素都是指针,即p[0]、p[1]、p[2]都是指针。
int a = 1, b = 2, c = 3;
int *p[3];
p[0] = &a;
p[1] = &b;
p[2] = &c;
printf("a = %d\n", *p[0]);
2. int p[3]
//数组,包含三个int类型的元素
3. int (*p)[3]
//指针数组,p是一个指针,指向一个包含三个元素的数组。
int arr[3] = {1, 2, 3};
int (*p)[3] = &arr;
// int (*p)[3];
// p = arr; //把arr地址赋值给p,那么 p+1,p指针就会跨过3个int型数据的长度。
printf("%d\n", (*p)[0]); //输出1
printf("%d\n", (*p)[1]); //输出2
//当数组指针指向一个二维数组时:
int(* p)[4]; //定义了指向含有4个元素的一维数组的指针
int a[3][4];
p=a; //将二维数组的首地址赋值给p,也可是a[0]或&a[0][0]
p++; //表示p跨过行a[0][],指向了行a[1][]
浙公网安备 33010602011771号