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'在数组中的位置有关。
三、数组做参数
数组做参数时, 可以不指定长度,也可以随便指定任何长度。因为数组做参数时性质已经变了,本质上只传递了数组的地址(指针)给形参。数组的空间特征已经消失了,无法通过形式参数获取来源数组的元素个数。
无论实参数组有多少个元素,使用sizeof获取形式参数的大小结果一定是4。(因为任何一个指针变量占用的大小都是4个字节)。
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++; } }
相关文章推荐
- C语言 实现一个函数,判断一个数是不是素数
- C语言 实现一个函数判断year是不是润年
- C++STL之双端队列容器
- C语言 使用函数实现两个数的交换
- C语言——getc()和putc()
- 【黑马训练营】IOS C语言Foundation框架
- C语言——fopen()和fclose()
- C语言的内存管理
- C语言总结错误
- C语言——文件
- 轻松搞定C语言中复杂的声明
- [黑马训练营]IOS C语言 内存管理
- VC++6.0 下配置 pthread库2010年12月12日 星期日 13:14VC下的pthread多线程编程 转载
- C语言合法整数
- c++实现队列
- C语言输入输出整数
- C语言输入输出整数
- ((*strDest++=*strSrc++)!='\0'); 的理解
- Edit Distance In C++
- Vusual C++连接Mysql和从MySql中取出数据的API介绍