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

一、数组

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++;
	}
}


















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值