您的位置:首页 > 编程语言 > C语言/C++

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

2015-10-18 15:25 253 查看
一、数组

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));   // 5
printf("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++;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: