21.数组&指针相关知识点
数组&指针相关知识点
1.数组反转
#include <stdio.h>
void init(int *arr,int size){
int i;
for(i=0;i<size;i++){
printf("请输入第%i个元素的数据:\n",i+1);
scanf("%d",&arr[i]);
}
}
void nixu(int *arr,int size){
int i,j;
int temp;
for(i=0;i<size/2;i++){
j = size-1-i;
temp = *(arr+i);
*(arr+i) = *(arr+j);
*(arr+j) = temp;
}
}
void print(int *arr,int size){
int i;
for(i=0;i<size;i++){
printf("%d ",arr[i]);
}
printf("\n");
}
int main(){
int arry[5];
int size = sizeof(arry)/sizeof(arry[0]);
init(arry,size);
print(&arry[0],size);
nixu(arry,size);
print(&arry[0],size);
return 0;
}
2.二维数组的地址相关知识点
-
指针=地址
-
数组名是一个指针常量,指向数组的首地址
-
a:父数组(行地址);a+1;偏移的是整个数组(也就是a[0]跳到a[1])
-
a[0]:子数组(列地址):a[0]+1:元素1跳到元素3
*a = * (a+0) = a[0]
-
代码
#include <stdio.h> int main(){ int arr[3][4] = {{11,22,33,44},{12,13,15,16},{22,66,77,88}}; printf("arr是父数组:%p,偏移1后的地址是%p\n",arr,arr+1); printf("arr[0]是子数组:%p,偏移1后的地址是%p\n",arr[0],arr[0]+1); //等价 //二维数组的取值,每个元素又是一个数组(对数组的操作,得到数组的首地址) printf("arr[0]是子数组:%p,偏移1后的地址是%p\n",*(arr+0),*(arr+0)+1); }
#include <stdio.h> int main(){ int arr[3][4] = {{11,22,33,44},{12,13,15,16},{22,66,77,88}}; int i; int j; for(i=0;i<3;i++){ for(j=0;j<4;j++){ printf("add:%p,data:%d\n",&arr[i][j],arr[i][j]); printf("add:%p,data:%d\n",&arr[i]+j,*(arr[i]+j)); printf("add:%p,data:%d\n",*(arr+i)+j,*(*(arr+i)+j)); printf("=========================================\n"); //三个方式的写法都是一样的 } printf("\n"); } }
-
二维数组a的有关指针
-
二维数组的知识点多复习复习
3.数组指针
-
数组指针:强调的是指针
-
代码
#include <stdio.h> int main(){ int a[3][4] = {{11,22,33,44},{12,13,15,16},{22,66,77,88}}; int i; int j; int *p; p = &a[0][0]; for(i=0;i<3;i++){ for(j=0;j<4;j++){ printf("%d\n",*p++); } printf("\n"); } }
//数组指针:定义一个指针,指向数组 #include <stdio.h> int main(){ int arr[3][4] = {{11,22,33,44},{12,13,15,16},{22,66,77,88}}; int i; int j; //数组指针:定义一个指针指向数组 int (*p2)[4]; p2 = arr; for(i=0;i<3;i++){ for(j=0;j<4;j++){ printf("%d\n",*(*(p2+i)+j)); //printf("%d\n",*(*(arr+i)+j)); //写法一样 } printf("\n"); } }
#include <stdio.h> int main(){ int arr[3][4] = {{11,22,33,44},{12,13,15,16},{22,66,77,88}}; int i; int j; //数组指针:定义一个指针指向数组 //数组指针=二维数组名 int (*p2)[4]; p2 = arr; printf("p2=%p\n",p2); printf("++p2=%p\n",++p2); for(i=0;i<3;i++){ for(j=0;j<4;j++){ } printf("\n"); } }
4.数组指针和二维数组的配合应用
输出二维数组任意行列的数
#include <stdio.h>
void tipe_input(int *pm,int *pn){
printf("输入行列值\n");
scanf("%d%d",pm,pn);
printf("\n");
//第二种
//return p[hang][lie];
}
int tipe_getdata(int (*p)[4],int hang,int lie){
int data;
data = *(*(p+hang)+lie);
return data;
}
int main(){
int arr[3][4] = {{11,22,33,44},{12,13,15,16},{22,66,77,88}};
int ihang;
int ilie;
int data;
//1.提示用户输入行列值
tipe_input(&ihang,&ilie);
//2.找出对应行列值的那个数
data = tipe_getdata(arr,ihang,ilie);
//3.打印出来
printf("%d行%d列的值是%d\n",ihang,ilie,data);
}
原文地址:https://blog.csdn.net/weixin_52010671/article/details/142645158
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!