数组

mac2024-01-26  33

一维数组名称

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h> void printArray(int arr[],int len)//int arr[]等价于int *arr { for (int i = 0; i < len; i++) { printf("%d\n",arr[i]);//给人看 //printf("%d\n",*(arr+i)); //给机器看的 } } void test01(){ int arr[5] = {1,2,3,4,5}; //一维数组名称 是不是指针 printf("sizeof arr=%d\n",sizeof(arr)); //除了两种特殊情况,一维数组名称都是指针 指向数组中首元素的地址 //特殊情况1 对数组名称 进行sizeof //特殊情况2 对数组名称 取地址 int *p = &arr; printf("%d\n",&arr); printf("%d\n",&arr+1); //数组名称 指针常量 指针的指向不可以修改 int * const p /* *arr = NULL; arr[0] = 100; printf("%d\n",arr[0]);*/ int len = sizeof(arr) / sizeof(int); printArray(arr,len); int *p1 = arr; p1 = p1 + 3; printf("%d\n",*p1); //[]里面可以放负数 printf("%d %d\n",*(p1-1),p1[-1]); } int main(){ test01(); return 0; }

数组指针

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h> //先定义出数组的类型,再通过类型创建数组指针 void test01(){ int arr[5] = { 1, 2, 3, 4, 5 }; typedef int(ARRAY_TYPE)[5]; // ARRAY_TYPE是一个数据类型,代表有5个int类型元素的数组 ARRAY_TYPE *arrP = &arr; //printf("%d\n",arrP); //**60 //printf("%d\n", arrP+1); //**80 // *arrP等价与 arr for (int i = 0; i < 5; i++) { printf("%d\n", (*arrP)[i]); } } //先定义数组指针的类型,再创建数组指针变量 void test02(){ int arr[5] = { 1, 2, 3, 4, 5 }; typedef int(*ARRAY_TYPE)[5]; ARRAY_TYPE arrP = &arr; } void print(int(*p)[4], int row){ for (int i = 0; i < row; i++) { for (int j = 0; j < sizeof(*p) / sizeof(int); j++){ printf("%3d",*(*(p+i)+j)); //printf("%3d ",p[i][j]); } printf("\n"); } } //直接创建数组指针变量 void test03(){ int arr[5] = { 1, 2, 3, 4, 5 }; int(*pArr)[5] = &arr; //pArr就是数组指针,指向长度为5的一维整型数组, sizeof(pArr)为4 //int *q[4]; 指针数组 int a[3][4] = {1,3,5,7,2,4,6,8,9,11,13,17}; int b[4] = {1,2,3,4}; int i, j; int(*p)[4]; p = a; print(p,3); } int main(){ test03(); return 0; }

二维数组名称

#include <stdio.h> #include <stdlib.h> void test01(){ //可读性高 int arr[3][3] = { {1,2,3}, {4,5,6}, {7,8,9} }; //int arr2[3][3] = {1,2,3,4,5,6,7,8,9}; //int arr3[][3] = {1,2,3,4,5,6,7,8,9}; int(*p)[3] = arr; //二维数组名称 指向第一个一维数组 //特殊情况 printf("sizeof arr=%d\n",sizeof(arr)); //36 统计二维数组长度 int(*p2)[3][3] = &arr; //对数组名取地址 //访问二维数组中的六 printf("%d\n",arr[1][2]); //给人看 printf("%d\n",*(*(arr+1)+2)); //给机器看 } //二维数组做函数参数 //void printArray(int p[][3],int row,int col) void printArray(int p[3][3], int row, int col) //void printArray(int (*p)[3],int row,int col) { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { printf("%d", *(*(p + i) + j)); } printf("\n"); } } void test02(){ int arr[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; printArray(arr,3,3); } int main() { test02(); system("pause"); }

指针数组的排序

#include <stdio.h> #include <stdlib.h> #include<string.h> void selectSort01(int arr[],int len){ for (int i = 0; i < len; i++) { int min = i; //定义最小值的的下标 for (int j = i+1; j < len; j++) { if (arr[min]>arr[j]) { //更新真实最小值下标 min = j; } } if (min!=i) { //交换数据 int temp = arr[i]; arr[i] = arr[min]; arr[min] = temp; } } } void printArray(int arr[],int len){ for (int i = 0; i < len; i++) { printf("%d\n",arr[i]); } } void test01(){ int arr[] = {10,2,5,1,7,4}; int len = sizeof(arr) / sizeof(int); selectSort01(arr,len); printArray(arr,len); } //通过选择排序算法计算后,实现对指针数据的降序排序 从大到小 void selectSort(char **pArr,int len){ for (int i = 0; i < len; i++) { int max = i;//认定最大值下标为i for (int j = i+1; j < len; j++) { if (strcmp(pArr[max],pArr[j])==-1) { //更新最大值下标 max = j; } } if (i!=max) { char *temp = pArr[max]; pArr[max] = pArr[i]; pArr[i] = temp; } } } void printCharArray(char **pArr,int len){ for (int i = 0; i < len; i++) { printf("%s\n",pArr[i]); } } void test02(){ char *pArr[] = {"aaa","bbb","fff","ddd","eee","ccc"}; int len = sizeof(pArr) / sizeof(char *); selectSort(pArr,len); printCharArray(pArr,len); } int main() { test02(); system("pause"); }

 

最新回复(0)