指针数组 与 二级指针
数组 与 数组指针
上面的两两一对,而并不是指针数组、数组指针这俩一对,弄清楚这一点,就懂了一半了。
一个是数组 ,一个是指针
指针数组:是一个存放指针的数组,数组的每个元素都是指针变量
看下面例子,看懂就会了
#include int main(){char *lines[5] = {"COSC1283/1284","Programming","Techniques","is","great fun"};char *str1 = lines[1];char *str2 = *(lines + 3);char c1 = *(*(lines + 4) + 6);char c2 = (*lines + 5)[5];char c3 = *lines[0] + 2;printf("str1 = %s\n", str1);printf("str2 = %s\n", str2);printf(" c1 = %c\n", c1);printf(" c2 = %c\n", c2);printf(" c3 = %c\n", c3);return 0;
}
对照上面哪里不会看哪里
#include int main(){char *string0 = "COSC1283/1284";char *string1 = "Programming";char *string2 = "Techniques";char *string3 = "is";char *string4 = "great fun";char *lines[5];lines[0] = string0;lines[1] = string1;lines[2] = string2;lines[3] = string3;lines[4] = string4;char *str1 = lines[1];char *str2 = *(lines + 3);char c1 = *(*(lines + 4) + 6);char c2 = (*lines + 5)[5];char c3 = *lines[0] + 2;printf("str1 = %s\n", str1);printf("str2 = %s\n", str2);printf(" c1 = %c\n", c1);printf(" c2 = %c\n", c2);printf(" c3 = %c\n", c3);return 0;
}
为了突出说明二级指针,再来:
#include int main(){char *lines[5] = {"COSC1283/1284","Programming","Techniques","is","great fun"};char **p = lines; //p是二级指针//line给p赋值,说明line是二级指针char *str1 = p[2]; //这里修改成2了原理一样char *str2 = *(p + 3);char c1 = *(*(p + 4) + 6);char c2 = (*p + 5)[5];char c3 = *p[0] + 2;printf("str1 = %s\n", str1);printf("str2 = %s\n", str2);printf(" c1 = %c\n", c1);printf(" c2 = %c\n", c2);printf(" c3 = %c\n", c3);return 0;
}
深入理解,关于地址怎么指的,指哪去了。
注意,"line"使用的时候也被理解成指针,也就是我们定义的那个p
二维数组是怎么回事?
int a[3][4]各部分是怎么回事?
重点:"a"当作指针用
定义数组指针:
热知识:数组指针走一步是走一行,也就是从a[0] 走到 a[1]
注意:维度必须要有,也就是说,得让这个指针知道它一行能走多少。
举个例子:维度是4,也就是一步走4 == 一行走4个元素
int (*p)[4];
**
#include
void func(int (*p)[4]) {printf("%d\n", p[1][2]); //输出6
}
void func1(int (*p)[3]) { //改变维度了,也就是,分组这样了//{{0,1,2},{3,4,5},{6,7,8},{9,10,11}}print("%d\n", p[1][2]); //输出5
}
int main(){int a[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};int(*p)[4];int i,j;p=a;for(i=0; i<3; i++){for(j=0; j<4; j++) printf("%2d ",*(*(p+i)+j));printf("\n");}func(a);func1(a);return 0;
}
int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){
}