c高级真几把难
终于到数组了,虽然编排得很乱
数组
1,第一种,sizeof(arr)计算的整个数组的大小;第二种,对数组名取地址,步长是整个数组长度,&arr,&arr+1。除此之外一维数组名都是指向数组第一个元素的指针
2,arr[i]=*(arr+1),p[-1]=*(p-1)
3,数组指针,int *p=&arr //报错,左右指针步长不一样
改为,int(*p)[5]=&arr;//数组指针,*p就是arr
for(int i=0;i<5;i++) printf("%d",(*p)[i]);
总结,数组指针语法,数组元素类型 (* 数组指针变量名称) [元素个数]
4,二维数组,int parr[3][3]=int (*parr)[3];二维数组是指向第一行数组的 数组指针
选择排序,例子1,对数组进行选择排序
存疑,打印不出结果来
#include<stdio.h>
void mysort(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[i])
{
min = i;//更新最小值下标
}
}
if (i != min)//判断假定的i和min是否一样,如果不一样,交换这两个下标对应元素
{
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
}
void myprint(int arr[],int len)
{
for (int i = 0; i < len; i++)
{
printf("%d",arr[i]);
}
}
void test01()//选择排序,从小到大排成升序
{
int arr[5] = {3,5,1,2,4};
int len = sizeof(arr) / sizeof(arr[0]);
mysort(arr,len);//定义一个选择排序函数
myprint(arr, len);//定义一个print函数
}
int main()
{
test01;
return 0;
}
例子二,对指针数组(是数组,里面放的全是指针)
妈的,怎么不出结果
#include<stdio.h>
void mysort(char* arr[], int len)
{//利用选择排序,排成降序
for (int i = 0; i < len; i++)
{
int max = i;//假定最大值下标
for (int j = i + 1; j < len; j++)
{
//if (arr[max] < arr[j])不能更新最大值下标,要对abc字符串进行比较
if (strcmp(arr[max]), arr[j == -1]);
{
max = j;//更新最大值下标
}
}
if (i != max)
{
char* temp = arr[i];
arr[i] = arr[max];
arr[max] = temp;
}
}
}
print(char **arr,int len)
{
for (int i = 0; i < len; i++)
{
printf("%d\n",arr[i]);
}
}
//指针数组,数组中每个元素都是指针,使用选择排序算法,进行降序排序,想要排序成fff,eee,ddd,ccc,aaa
void test02()
{
char* parr[] = {"aaa","bbb","ccc","ddd","fff","eee"};
int len = sizeof(parr) / sizeof(char *);
//printf("%d",len);
//存疑,为什么不能打印出len的值
mysort(parr, len);
print(parr, len);
}
int main()
{
test02;
return 0;
}
来人呐,上结构体!
阶段二.3.0109结构体使用