一维数组的初始化:
类型说明符 数组名[常量表达式]={值}
在{}里的值要用’,’间隔开。
注:数组的创建,{}中要给一个常量或者一个常量表达式才可以,不能使用变量。
在内存中的分配:
char arr1[]=”abc”; 在内存的布局:’a’’b’’c’’\0’
char arr2[]={‘a’’b’’c’} 在内存的布局:’a’’b’’c’
一维数组的指针访问:
数组名就是数组首元素的地址,打印数组的时候前面加或者不加&都可以。而且通过数组名+整数的运算就可以获得整个数组的地址。
int main()
{
int arr[5] = { 0 };
int i = 0;
int *p = arr;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz; i++)
{
*(p + i) = i;
}
for (i = 0; i < sz; i++)
{
printf("%d\n", *(p + i));
}
system("pause");
return 0;
}
一维数组与函数参数:
一维数组的元素作为函数实参,与同类型的简单变量作为实参一样,是单向的值传递,即数组元素的值传给形参,从而形参是改变不影响实参
数组名代表着整个数组的地址,如果一维数组的名字作为函数实参,传递的是整个数组,即形参数组和实参数组完全相同,是存放在同一存储空间的同一个数组。这样形参数组
修改时,实参数组也同时被修改了。形参数组的元素个数可以省略。
一维数组的使用:冒泡排序
void bubbleSort(int arr[],int length)
{
for (int i=0; i<length; i++)
{
for (int j=0; j<length-1-i; j++)
{
if (arr[j]>arr[j+1])
{
int temp=arr[j];
arr[j]=arr[j+1];\
arr[j+1]=temp;
}
}
}
}
二维数组:
1. 二维数组的创建:
Int arr[3][5]
char arr[3][5]
double arr[3][5]
2. 数组的初始化:
Int arr[3][4]={1,2,3,4};
Int arr[3][4]={{1,2}{3,4}}
Int arr[][4]={{1,2}{3,4}}
注:行可以不写但是列一定要写。
3. 二维数组在内存中的存储:
1. 数组a的地址是ffc1,数组a[0]的地址也是ffc1,即a = a[0];
2.元素a[0][0]的地址是ffc1,所以数组a[0]的地址和元素a[0][0]的地址相同,即a[0] = &a[0][0];
3.最终可以得出结论:a = a[0] = &a[0][0],以此类推,可以得出a[1] = &a[1][0]
4. 二维数组在内存中跟一维数组一样是连续存储的。
5. 有关数组的运算:
int a[] = {1,2,3,4};
printf("%d\n",sizeof(a)); //16 数组的大小
printf("%d\n",sizeof(a + 0)); //4 首元素地址
printf("%d\n",sizeof(*a)); //4 首元素
printf("%d\n",sizeof(a+1)); //4 第二个元素地址
printf("%d\n",sizeof(a[1])); //4 第二个元素
printf("%d\n",sizeof(&a)); //4 数组的地址
printf("%d\n",sizeof(*&a)); //16 数组的大小(&取的是数组首元素的地址*&指向整个数组)
printf("%d\n",sizeof(&a+1)); //4 是一个地址
printf("%d\n",sizeof(&a[0])); //4 首元素地址
printf("%d\n",sizeof(&a[0]+1)); //4 第二个元素地址
char arr[] = {'a','b','c','d','e','f'};
printf("%d\n", sizeof(arr)); //6 数组的大小
printf("%d\n", sizeof(arr+0));//4 首元素地址
printf("%d\n", sizeof(*arr)); //1 首元素
printf("%d\n", sizeof(arr[1])); //1 第二个元素
printf("%d\n", sizeof(&arr)); //4 数组的地址
printf("%d\n", sizeof(&arr+1)); //4 下一个数组的地址
printf("%d\n", sizeof(&arr[0]+1)); //4 第二个元素地址
printf("%d\n", strlen(arr)); //随机值x 执行需遇到"\0"结束
printf("%d\n", strlen(arr + 0)); //随机值x 执行需遇到"\0"结束
printf("%d\n", strlen(*arr)); //error 执行的"a"的ASCII
printf("%d\n", strlen(arr[1])); //error 执行的"b"的ASCII
printf("%d\n", strlen(&arr)); //随机值x 执行需遇到"\0"结束
printf("%d\n", strlen(&arr + 1)); //随机值x-6 执行需遇到"\0"结束
printf("%d\n", strlen(&arr[0] + 1)); //随机值x-1 执行需遇到"\0"结束
char arr[] = "abcdef";
printf("%d\n", sizeof(arr)); //7 数组的大小,包括"\0"
printf("%d\n", sizeof(arr + 0)); //4 首元素地址
printf("%d\n", sizeof(*arr)); //1 首元素
printf("%d\n", sizeof(arr[1])); //1 第二个元素
printf("%d\n", sizeof(&arr)); //4 数组的地址
printf("%d\n", sizeof(&arr + 1)); //4 下一个数组的地址
printf("%d\n", sizeof(&arr[0] + 1)); //4 第二个元素地址
printf("%d\n", strlen(arr)); //6 数组的长度
printf("%d\n", strlen(arr+0); //6 数组的长度
printf("%d\n", strlen(*arr)); //error 执行的"a"的ASCII
printf("%d\n", strlen(arr[1])); //error 执行的"b"的ASCII
printf("%d\n", strlen(&arr)); //6 数组的长度
printf("%d\n", strlen(&arr+1)); //随机值
printf("%d\n", strlen(&arr[0]+1)); //5 从第二个元素开始的数组长度
char *p = "abcdef";
printf("%d\n", sizeof(p)); //4 指针变量大小
printf("%d\n", sizeof(p + 1)); //4 第二个元素地址
printf("%d\n", sizeof(*p)); //1 首元素
printf("%d\n", sizeof(p[0])); //1 首元素
printf("%d\n", sizeof(&p + 1)); //4 跳过p的地址
printf("%d\n", sizeof(&p[0] + 1)); //4 第二个元素地址
printf("%d\n", strlen(p)); //6 数组长度
printf("%d\n", strlen(p+1)); //5 从第二个元素开始的数组长度
printf("%d\n", strlen(*p)); //error 执行的"a"的ASCII
printf("%d\n", strlen(p[0])); //error 执行的"a"的ASCII
printf("%d\n", strlen(&p)); //随机值
printf("%d\n", strlen(&p+1)); //随机值
int a[3][4] = {0};
printf("%d\n",sizeof(a)); //48 数组的大小
printf("%d\n",sizeof(a[0][0])); //4 首元素
printf("%d\n",sizeof(a[0])); //16 第一行元素
printf("%d\n",sizeof(a[0]+1)); //4 第一行第二个元素
printf("%d\n",sizeof(a+1)); //4 第二行第一个元素地址
printf("%d\n",sizeof(&a[0]+1)); //4 第二行地址
printf("%d\n",sizeof(*a)); //16 第一行元素
printf("%d\n",sizeof(a[3])); //16 sizeof(表达式) 内部表达式不计算。这里就表示一行元素
常用字符串处理函数 (以下函数需要头文件“ string.h ” )
1、 strlen()作用是测试字符串长度。这里不包括‘ \0’ . 使用形式 strlen(数组名或字符串常量 )
2、 strcat()作用是连接两个字符串。调用方式 strcat(字符数组 1名,字符数组 2名 ) ;合并后的字符串接在字 符数组 1中。并删除字符串1中后面的串标志“\0”。
3、 strcmp()比较两个字符串是否相等。调用方式 strcmp(字符串 1,字符串 2) ;相等时值为 0。 1>2时为正数。 1<2时为负数。
4、 strcpy()复制字符串。调用方式 strcpy(字符数组 1,字符串 2);2的内容复制到 1中。 1只能是字符数组名。
5.字符串输入函数:gets(字符数组名)
6.字符串输出函数:puts(字符数组名)