Chinaunix首页 | 论坛 | 博客
  • 博客访问: 68160
  • 博文数量: 24
  • 博客积分: 410
  • 博客等级: 一等列兵
  • 技术积分: 240
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-16 19:10
文章分类
文章存档

2011年(24)

分类: C/C++

2011-04-09 14:12:56

C99中的变长数组:  这个新的出现可以允许使用变量定义数组各维,例如如下的申明:

int quarters = 4;

int regions = 5;

double salse[regions][quarters] ; //一个变长数组

注意:变成数组必须是自动存储类,这意味着他们必须在函数内部或者作为函数参数申明,而且申明的时候不可以进行初始化

变长数组中的“变”并不代表在创建数组后您可以修改大小,变长数组的大小在创建爱你的后就是保持不变的,“变”的意思是说其维大小可以用变量来指定、

例如:int sum2d(int rows,int clos,int ar[rows][clos]);

C99规定,可以省略函数原型中的名称,但是如果胜率名称,则需要用星号来代替省略的维数

例如: int sum2d(int rows,int clos,int ar[*][*]);

和老语相同,变长数组名也是该数组的首地址,也就是说变成数参量的参数实际上直接使用函数组。变长函数允许动态分配存储单元。

符合文字:  符合文字看起来就是在数组的初始化列表前面加上圆括号括起来的类型名,例如:

(int [2]){10,20};同样初始化符合文字也可以不用表明数组的大小 (int [] = {1,2});

由于这些服饰文字没有名称,因此不可能在一个语句中创建他们,然后再另外一个语句中使用,因此用指针来保存其位置 例如:

int *ptr;

ptr = (int [2]){12,43};

例如: int sum(int ar[],int n);

....

int total[12];

total2 = sum((int []){1,2,3,4,3...});

这种给函数传递信息而不必先创建数组的做法,是符合常量的使用方法。

例如:

int(*ptr2)[4];

ptrt2 = (int [2][4]) {1,1,......};

字符串常量又称为字符串文字。是爱一对双引号中的任何字符。

如果想在字符串中使用双引号则应该这样:

printf("\"run ,spor,run !\exclaimed dick\n");即在双引号前面加 \ 即可

打印出的结果为 "run ,spor,run !"ecxclaimed dick.

对于字符串数组来说,如果结尾不加"\0"则表示的是一个字符数组,而不是表示一个字符串。

字符数组和字符指针的比较:  例如:

char heard[] = "hello world";

char *heard = "hello world";  对于heard来说,它代表一的是一个常量,而指针heard 代表的是变量

注意:只有指针才可以使用增量运算符。

字符串的输入:   gets()的一个不足之处在于它不能检查预留存储区是否能够容纳下世纪输入的数据,而fgets()却可以。它有的不同之处在于:它需要第二个参数来说明最大读入的字符数,如果它遇到换行符,就会把它存储到字符串里,而不像gets()那样给丢弃。它需要第三个参数来说明读哪个文件,使用stdin.

注意:空指针是一个地址,而空字符是一个char类型的数据对象,其值为0.  NULL代表一个空指针,而0代表一个char类型的常量。

scanf和 gets的主要区别在于他们如何决定字符串何时结束。 scanf更多的时候来获取单词而不是字符串。

fputs()函数需要第二个参数来表示说明要写的文件可以使用stdout. 

strcpy()该函数出了能够复制外,它还有高级用法,首先,他是一个char* 类型,他返回值是第一个参数的值,即一个字符的地址,其次,第一个参数不需要指向数组的开始,这样就可以只复制数组的一部分。

sprintf()函数的用法:它却别与printf()函数的是:它写到字符串里而不是输出显示。它的第一个参数是目标字符串的地址,其余额的参数和printf()是一致的。

ANSI C中有20多个处理字符串的函数,一下是有些常用的:

一 char *strcpy(char *s1,const char *s2); 把函数s2指向的字符串复制到s1中返回值是s1

二 char *strncpy(char *S1 ,char *S2.size_t n); 把函数S2指向的字符串复制到S1指向的位置,复制的字符数不超过n个,返回值是S1。空字符后的字符是不会被复制的。如果复制的字符小于n则就以空字符填充

三 char *strcat(char *S1,const char S2);S2指向的字符串被复制到S1指向的字符串的尾部,复制过来的S2覆盖了原来S1的空字符。

四 char *strncat(char *S1,const char *s2 ,size_t n);同上,但是确定了最大的复制数目。

五 char strcmp(const char *S1,const char *S2) ;比较两个字符串的大小,如果前者落后于后者则返回值是正数,如果相同返回值是0,如果前者大于后者,则返回值是负数。

同样的还有strncmp(),只不过它也多一个比较的n

六 char *strchr(const char *s ,int c);当函数放回一个指向字符串c的第一个位置的指针,如果没有搜到则返回空指针。

char *strpbrk(cosnt char *S1,const char *S2);函数返回一个指针,指向字符串S1中存放S2字符串中的第一个位置,如果为没有找到,则返回空指针。

char *strrchr(const char *s,int c);该函数返回一个指针,指向字符串S中C最后一次出现的地方,如果么有找到,则返回空指针

char *strstr(const char *S1,const char *S2);该函数返回一个指针,指向S1中出现第一次S2的地方,如果没有找到,则返回空指针。

七 size_t strlen(cosnt char *s); 该函数返回的是S字符串中字符个数,其中不包括标志结束的空字符。

strtoul()函数把一个字符串转化为unsigned long 型值,strtod()把一个字符串转换为double型值。

atoi()函数把一个字符串转换为int 型值

atol()函数把一个字符串转换为long 型值

atof()函数把一个字符串转换为double 型值

 

阅读(1375) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~