C语言---数组,字符串数组,冒泡排序

来源:互联网 发布:mac桌面不显示u盘 编辑:程序博客网 时间:2024/05/16 05:04

一、数组

1.数组的定义: intarr[]={12,13,14,15};   或者  int arr[10]={12,13,14,15,16};

初始化元素的个数可以不全,未初始化的元素默认为0

2.求数组的空间:

sizeof(arr); 或者sizeof(元素)*元素的个数;

3.求数组的个数:

假设arr为int类型的数组,sizeof(arr)/sizeof(int); 或者sizeof(arr)/sizeof(arr[0]);

注:在实际开发过程,往往不直接写数组个数,而是用求数组个数。这样有利于总数发生变化时,遍历数组时不需要修改每一处。

4.越界问题:C语言内部没防止越界,程序员只能通过代码来防止出现。

 

二、字符串数组

1.字符串数组:是一种特殊的数组。特征是:

(1)必须是char类型的数组。

(2)在数组定义的有效空间内,必须含有一个数值是‘\0’的字节。

(3)'\0'作为字符串的结束标志。

2. 字符串数组的初始化:

(1)指定元素个数的数组:

char str1[10] = {'a','b'};  //不是有效字符,因为缺少’\0’结束符号

char str2[10] = "aab"; //不可超过9个有效字符

(2)不指定个数的字符串数组,根据初始化个数包括'\0'

char str3[] = "abcdef";  //申请7个字节的数组空间,多了一个”\0”

char str4[] = {'x’, 'y', 'z',108}; // 申请是4个字节的数组空间

3.数组长度和字符串长度:

(1)strlen函数:是用来计算字符串中有效字符的长度。(不包括结尾符)

(2)sizeof:求字符串数组的元素个数,sizeof得出的结果至少比strlen大1以上。

(3)strlen函数:计算方法是从数组头循环到结尾符'\0'结束,得出的字符串有效字符长度总是小于sizeof得出的的数值。

(4)sizeof:得出的数组长度与数组内每个元素存储的数值无关;而strlen函数返回的字符串长度,与结尾符'\0'在数组中的位置有关。

char str1[]={'A',66,'D','X',105 };char str2[]="console";printf("sizeof(str1)=%d\n",sizeof(str1));   // 5printf("sizeof(str2)=%d\n",sizeof(str2));// 8 printf("strlen(str2)=%d\n",strlen(str2));// 7

三、数组做参数

数组做参数时, 可以不指定长度,也可以随便指定任何长度。因为数组做参数时性质已经变了,本质上只传递了数组的地址(指针)给形参。数组的空间特征已经消失了,无法通过形式参数获取来源数组的元素个数。

无论实参数组有多少个元素,使用sizeof获取形式参数的大小结果一定是4。(因为任何一个指针变量占用的大小都是4个字节)。

#include <stdio.h>void bubble_sort(int a[],int nLen);void Print(int a[],int nLen);int main(int argc, char* argv[]){printf("排序前的数组: \n");int arr[]={5,15,9,8};Print(arr,sizeof(arr)/sizeof(arr[0]));bubble_sort(arr,sizeof(arr)/sizeof(arr[0]));printf("排序后的数组:\n");Print(arr,sizeof(arr)/sizeof(arr[0]));return 0;}//冒泡排序void bubble_sort(int a[],int nLen){int i=0,j=0;--nLen;while(i<nLen){j=0;while(j<nLen-i){if(a[j]>a[j+1]){int temp=a[j];a[j]=a[j+1];a[j+1]=temp;}j++;}i++;}}void Print(int a[],int nLen){int i=0;//while(i<sizeof(a)/sizeof(a[0])){  //此时的a是指针,占4个字节,即sizeof(a)/sizeof(a[0]=1.所以只打印一次while(i<nLen){printf("a[%d]=%d \n",i,a[i]);i++;}}


















0 0
原创粉丝点击