10、C语言 —— 指针与一维数组(指针数组与数组指针)
程序员文章站
2022-07-07 11:37:10
...
1、使用指针修改数组元素
int array[2];
int *p;
p = array;
// 或 p = &a[0];
*p = 10;
printf("a[0]=%d\n", a[0]); // 输出:a[0]=10
2、使用指针遍历数组
// a、平常我们是这样遍历数组的
int array[3] = {1, 2, 3};
for(int i=0; i<3; i++) {
printf("a[%d]=%d\n", i, a[i]);
}
// b、用指针可以这样遍历数组
// 如果 p 是指向数组array的首元素array[0]
// 那么 p+1 则会根据数据类型 int 从而指向数组array的第二个元素array[1]
// 在16位编译器环境下,p+1代表增加2个字节
int *p = array;
for(int i=0; i<3; i++) {
printf("a[%d]=%d\n", i, *(p+i));
}
// c、指针遍历2
// 此种方法相比于上一种方法不同的是:上一种方法指针p不变,而这种p每循环一次就改变一个
for(int i=0; i<3; i++) {
printf("a[%d]=%d\n", i, *(p++));
}
// d、指针遍历3
// 数组跟指针有着密不可分的关系,array[i]也可以写成*(array+i)
for(int i=0; i<3; i++) {
printf("a[%d]=%d\n", i, *(array+i));
}
3、指针,数组与函数参数
// 定义一个修改数组首元素的函数
void change(char c[]) {
c[0] = 0;
}
void main() {
char a[3];
change(a); // 传入数组地址
printf("a[0]=%d\n", a[0]); // 输入:a[0]=10
}
// 也可传入指针
void main() {
char a[3];
char *p = a;
change(p); // 传入地址
printf("a[0]=%d\n", a[0]); // 输入:a[0]=10
}
// 当然,change函数还可以改成这样
void change(char *c) {
*c = 10;
// 或c[0] = 10;
}
4、指针数组与数组指针
a、指针数组:int *p[n];
因为优先级:() > [] > *
p首先是一个数组,再由 int * 说明这是一个整型指针数组
即数组里的元素都存放着变量的地址
b、数组指针(行指针):int (*p)[n];
p是一个指针,指向一个整型的一维数组
int a[3][4];
int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。
p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]
// 所以数组指针也称指向一维数组的指针,亦称行指针。
转载于:https://my.oschina.net/cobish/blog/337747
上一篇: 求100以内的素数
下一篇: c语言二维数组与指针的关系