黑马程序员——数组和字符串

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


数组:构造类型


数组使用注意

1、只能在定义数组的时候初始化

可以写为intages[5] = {10,11}; // 对前面的赋值

int ages[5] = {[3] =10, [4] =11}; //  对后面的赋值 比较少用

int ages[] = {10,11,12};  // 是正确写法。

int ages[ ];  // 错误的写法。

int ages[‘A’] = {10,11,12,13}; // 可以这样写

int count = 5;   int ages[count] = {10,11,12};  // 错误的写法,定义数组时初始化, 数组个数只能是常量或者不写

int count = 2;   int ages[count]; ages[0]=2; ages[1]=12;  //  这样可以,但要一个一个对应赋值

2、数组作为函数参数时,可以省略元素个数,例如:void prry(int array[ ])

3、调用时数组作为函数参数,传递的是整个数组的地址。若修改了函数形参的值是会影响到外面实参数组的值的。

 

计算数组的长度:

int ages[ ] = {10,2,58,6};

int count= sizeof(ages)/sizeof(int);  //  因为一个int型占四个字节,所以除以int的字节数。此处相当于除以4.


数组在内存中的存储:

例如ag[0],ag[1],ag[2];是在分配给整个数组的内存中按由小到大存储的,ag[0]就是整个数组的地址。 数组名a就是数组的地址。 

打印数组的地址:

<span style="font-size:18px;">#include<stdio.h>
int main()
{
    int ages[3] = {12,10,15};
  printf("%p\n", ages);  // 或者写为&ages 取地址符号
for(int i = 0;i<3; i++)
{
<span style="white-space:pre">	</span>printf("ages[%d]的地址是%p\n", i, &ages[i]);
}
return 0;
} </span><span style="font-size:24px;">
</span>


练习:求出数组最大值:

<span style="font-size:18px;">#include <stdio.h>
int maxarray(int array[ ],int length);
int main()
{
int ages[] = {10,15,65,29,83,14,23};
int length =sizeof(ages)/sizeof(int);
maxarray(ages,length);
return 0;
}
int maxarray(int array[ ], int length)
{
int max = array[0];
for(int i= 1; i<length; i++)
{
if(array[i]>max)
{ max = array[i]}
}
return max;
}</span>


(字符)字符串:

char类型用法:字符对应的ASCII码表。char c = ‘A’;  输出字母用%c

#include<stdio.h>
int main()
{
char c = 'A' + 32;
printf("%c,%d\n",c,c)  // 分别以字符形式和整数形式输出
return 0;
}
char类型使用注意:

以下几种写法都是错误的:1、 char c = ‘男’; 一个汉字占三个字符2、char c = A ;   3、char c = “A”;     

正确写法:char c = 65; //如果数字不是很大-128——127之间可以用char这样节省内存

 注意:“转义字符”也是有ASCII码的。例如\n \t  \\  \”   , 要输出一个\ 或者双引号 printf(“\\”);

char练习:编写一个小写转为大写的函数

<span style="font-size:18px;">char upper(char c)
{
if(c>=’a’ && c<=’z’)
{
  return c-('a’- 'A’); // 也就是减去32
}
return c;
}</span><span style="font-size:24px;">
</span>

字符串:字符串要有’\0’做结束标志

例如:“jack” = ‘j’ + ‘a’ + ‘c’ + ‘k’ + ‘\0’  是有这五个字符组成的,最后一个是’\0’

C语言中存储字符串用字符数组。char name[10] = “jack”; printf(name);

char name1[8] = “it”;

char name2[8] = {‘i’, ‘t’, ‘\0’};

char name3[8] = {‘i’, ‘t’,0}; 

char name4[8] = {‘i’, ‘t’}; 

以上四种写法结果一样,因为\0 的ASCII码值为0

 \0的用法:

<span style="font-size:18px;">#include <stdio.h>
int main()
{
char name[ ] = "it";
char name2[ ] = {'o', 'k'};
printf("%s\n",name2);   /* name2相当于传递数组的地址。输出结果为okit。因为占位符%s要求输出一个字符串,而name2为一个                         字符数组,所以在内存中它就向下寻址,直到遇到 \0为止。若在name2中增加’\0’ 。则正常输出。
                         若为printf(“%s\n”,&name2[1]); 从name2的第二个元素地址开始寻找。则输出kit */
return 0;
}</span>

strlen函数用法和注意:

计算字符串的字符数的长度(不包括\0的长度)。

strlen从一个起始地址开始数直到遇到\0 才为止。

使用时加头文件 #include <string.h>

<span style="font-size:18px;">#include <string.h>
#include <stdio.h>
int main()
{
int size = strlen("哈haha");
printf("%d\n", size); // 输出7,一个汉字占三个字符。
return 0;
}
</span>

字符串练习:写一个函数,当字符串中含有指定字符时输出1,没有输出0。

#include <stdio.h>
#include <string.h>
int char_cont(char str[], char c);
int main()
{
char name[ ] = "itcast";
int result = char_cont(name, 'c');
printf("%d\n", result);
return 0;
}
int char_cont(char str[], char c)
{
int i = 0;
while(str[] != '0’)  // 也可以写为while(str[i] != 0)或者while(str[i])
{
if(str[i] == c)
{ return 1;}
}
return 0;
}

字符串数组:

即二维数组,

char name[3][10] = {“jack”, “rose”, “jim”}; // 定义三个人的姓名,每一个最多十个字符。

printf(“%s\n”, name[1]);  // 输出rose













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值