#include <stdio.h> #include <stdlib.h> #include <assert.h> /** * @brief * * @param arr * @param length * @param key */ void removenum(int arr[],int length,int key); /** * @brief * * @param arr * @param length */ void printnum(int arr[],int length); /** * @brief * * @param arr * @param length */ void printnum(int arr[],int length) { assert(arr!=NULL); for(int i=0;i<length;i++) { printf("%d\n",arr[i]); } } /** * @brief * * @param arr * @param length * @param key */ void removenum(int arr[],int length,int key) { assert(arr!=NULL); for(int i=0;i<length;i++) { if(key==arr[i]) { for(int j=0;j<length-1;j++) { arr[i]=arr[j+1]; } arr[length-1]=0; i--; } } } int arr[12] = { 10,20,30,40,50,60,70,80,90,100,110,120 }; int(*parr)[12] = &arr;//==int[12]* parr=&arr; *parr指向 int arr[12]的数组。数组里面存储的是12个元素的整形数据。 int* pparr = &arr[0];//==int* pparr[12]= &arr[0],数组元素存储的是指针 void show() { printf("sizeof(arr)=%ld\t sizeof(parr)=%ld\n",sizeof(arr),sizeof(parr));//sizeof(arr)=48 sizeof(parr)=8 //特别注意的是:指针和数组,sizeof是不一样,但是访问元素的时候,可以是相同的形式 //sizeof(parr)是指针:占用的内存为8个字节是指针固定占用的内存空间。 //sizeof(arr)是数组:占用的是元素个数总和的空间。 printf("*arr=%d,parr=%d,*pparr=%d,\n",*arr,*(*parr),*parr); printf("arr=%p\t parr=%p\n",arr,parr);//都是指向数组的首地址 //parr:数组指针指向的是一个数组,准确的说,指向的是一个数组首个元素的地址 printf("*parr=%p\n",*parr); //parr是一个指针指向的是arr数组,arr数组返回的又是数组元素的手地址,所以*parr返回的是arr数组首个元素的地址 printf("*(*parr)=%d\n",*(*parr));//10 //*(*parr)先解引用parr得到的是第一个元素的地址,在解引用指针就能获取元素的值 printf("parr访问第二个元素地址=%p\n",*parr+2); printf("arr+1=%p\t parr+1=%p\n",arr+1,parr+1); //arr指向的是数组的首地址,+1后表示下一个地址 //parr:指针指向的是arr的整个数组,parr+1后指向的就是下一个数组首个元素的地址。 for(int j=0;j<4;j++) { } //遍历 for(int i=0;i<12;i++) { printf("第%d个元素的地址=%p\t 第%d个元素的值=%d\n",i,*parr+i,i,*(*parr+i)); } } int main() { printf("geovindu\n"); printf("hello world!"); printf("你好,世界\n"); int arrdu[4][5]={10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200}; int arrd[3][4]={10,20,30,40,50,60,70,80,90,100,110,120}; int (*pp)[4]=arrd; //printf("%d",(*pp)[0]); //printf("%d",(*pp)[1]); //printf("%d",*pp[0]); //printf("%d",*pp[1]); //1. printf("1列的首位元素\n"); for(int k=0;k<3;k++) { printf(" %d ",*pp[k]); //列的首位元素 } printf("\n2第一行的遍历值\n"); for(int k=0;k<3;k++) { printf(" %d ",(*pp)[k]); //第一行的遍历值 } printf("\n3列的首位元素\n"); //3. for(int k=0;k<3;k++) { printf(" %d ",pp[k][0]); //列的首位元素 } printf("\n4第一行的遍历值\n"); //4 第一行的遍历值 for(int k=0;k<4;k++) { printf(" %d ",(*pp)[k]); } printf("*((*pp)+1)=%d\n",*((*pp)+1)); printf("*pp[1]=%d\n",*pp[1]); //50 printf("(*pp[1])+1=%d\n",(*pp[1])+1); //51 printf("*(*pp+1)=%d\n",*(*pp+1)); printf("*(*arrd+1)=%d\n",*(*arrd+1)); printf("*arrd[1]=%d\n",*arrd[1]); //50 printf("*arrd[1]=%d\n",*arrd[1]); //50 printf("\n6遍历二维数组\n"); int *dup; dup=arrd[0]; for (int i = 0; i < sizeof(arrd) / sizeof(int); i++) { //printf("%d ",&arrd[i]); //p = arr[i]; printf("%d ",*dup++); } printf("\n7遍历二维数组\n"); //6 遍历二维数组 for(int j=0;j<3;j++) { for(int k=0;k<4;k++) { printf(" %d ",pp[j][k]); } printf("\n"); } printf("\n"); show(); char b[]="agbdkfjdkajfkdasjfdkla"; printf("%ld",sizeof(b)); int c=sizeof(b)/sizeof(b[0]); printf("%d",c); for (int i = 0; i < c; i++) { printf("i=%d,\t b=%c,\b 内存地址=%p\n",i,b[i],&b[i]); } int num[5]={1,2,3,4,5}; removenum(num,5,3); printnum(num,5); system("pause"); return 0; }
标签:arr,int,void,brief,param,length,arry From: https://www.cnblogs.com/geovindu/p/17795874.html