C语言中 字符、数组、字符串、指针——学习IOS你必须了解

来源:互联网 发布:淘宝每天可以花5000 编辑:程序博客网 时间:2024/06/07 07:08

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

一、char类型

1、内存存储:对应于ASCII码表存储
字符 ASCII码值 内存存储
A    65        0100 0001
B    66        0100 0010
C    67        0100 0011
a    97        0110 0001                                 
2、char类型使用注意
1>.单引号'只能括住单字节字符,不能是汉字
2>.注意不要把单引号写为双引号,也不要忘记单引号括起来
3>.可以写为char c=65;//char c='A';  
练习
写一个函数,将小写字母转为大写

#include<stdio.h>                     char upper(char c){//如果是小写字母,就转为大写if(c>='a'&&c<='z'){return c-(‘a’-‘A’);}//如果不是小写字母,返回本身return c;}int main(){char cc=upper('a');printf("%c\n",cc);return 0;}

二、数组
1、定义:存放一组数据,这组元素应具有同一种类型            
格式:
类型 数组名[元素个数];例:
int age[50];数组元素下标从0开始,即age[0]、age[1]、age[2]、age[3]、age[4]......age[49]
也可以定义为 :类型 数组名[元素个数]={X,X,X,......};此种方式只要没有赋值的元素默认为0
几种常见的数组初始化方法:
int age[5]={1,2,3,4,5};//每一个元素都赋值
int age[]={1,2,3};//确定只有3个元素
int age[5]={1,2};//只有前2个元素赋值,后面元素默认为0
int age[5]={[3]=4,[4]=5};//直接给第三个元素赋值为4,第四个元素赋值为5
int age['A']=int age[65];
int age['A'-60]=int age[5];
int age[];//错误初始化
int age[n];int n=5;//错误初始化,中括号里面只能是常量,不可以是变量
int age[n];int n=5;age[0]=1;age[2]=1;age[3]=1;但是此种是正确初始化方法
2、遍历:按顺序查看每一个元素
for(int i=0;i<5;i++){
printf("age[%d]=%d\n",i,age[i]);
}
3、求数组元素个数
int age[]={1,2,3};
int count=sizeof(age)/sizeof(int);

4、求数组元素首地址、打印地址

//打印地址
for(int i=0;i<5;i++){
printf("age[%d]的地址是:%p\n",i,&age[i]);
}
注:数组作为函数参数可以省略元素个数,实际传递的是整个数组的地址,修改函数形参数组元素的值也会影响到外面的实参数组

练习
设计一个函数找出整型数组元素的最大值

#include<stdio.h>int maxOfArrary(int array[],int length){int max=array[0];//定义一个变量存储最大值,默认为首元素for(int i=0;i<length;i++){//遍历所有元素找出最大值if(array[i]>max){//如果当前元素大于max,就把当前元素覆盖maxmax=array[i];}}return max;}}int main(){int ages[]={81,75,14,145,45,79};int max=maxOfArrary(ages,sizeof(ages)/sizeof(int));printf("%d\n",max);return 0;}
5、二维数组
int age[3][50]={{},{},{}};//3个数组,每个数组有50个存储空间,即3行50列
三 、字符串、字符串数组
1、初始化
\0的ASCII码值是0
char name[5]="it";==
char name[5]={'i','t','\0'};==
char name[5]={'i','t',0};==
char name[5]={'i','i'};
2、字符串的长度后面隐藏一个\0,所以长度+1
输出用%s,遇到第一个\0结束,\0是字符串结束的标志、
一个汉字是3个字符
#include<stdio.h>int main(){char name[]="it";char name2[]={'o','k'};printf("%s\n",name2);//输出为okitprintf("%s\n",%name2[1]);//输出为okreturn 0;}
3、strlen函数:计算字符串长度
#include<string.h>//strlen函数声明在string.h文件中#include<stdio.h>int main(){char name[]="itcast";char name2[]={'0','\0','6'};//遇到\0就结束int size=strlen(name2);printf("%d\n",size);//只有一个字符'0',所以结果为1//计算的字符不包括\0return 0;}

下边是该段代码段的图形表示


练习

编写一个函数char_contain(char str[],char c),如果字符串str中包含字符c泽返回1,否则返回0
#include<string.h>#include<stdio.h>int main(){int result=char_contain("itcast",'t')printf("%d\n",result);return 0;}第一种方法:用for循环int char_contain(char str[],char c){//遍历整个字符串for(int i=0;i<strlen(str);i++){if(str[i]==c){//如果发现字符c返回1return 1;}}//说明str里面不包含字符creturn 0;}/*第二种方法:用while循环int char_contain(char str[],char c){//遍历整个字符串int i=-1;while(str[++i]){//因为字符串以\0结束而\0=0if(str[i]==c){//如果发现字符c返回1return 1;}}//说明str里面不包含字符creturn 0;}*/
4、字符串数组
例:char names[2][10]={"jack","rose"};
printf("%s\n",names[1]);//访问"rose"
printf("%s\n",names[0][1]);//访问"jack"里面的'a'

四、指针
#include<stdio.h><pre name="code" class="cpp">viod change<span style="font-family: SimSun;">(int n);</span>
int main(){int a=90;change(a);printf("a=%d\n",a);return 0;}viod change(int n){n=10;}
上面代码中执行后a的值依然是90,那么怎么把形参n的值传给实参a,这需要用到指针1、定义1>.格式:变量类型 *变量名2>.指针变量只能指向存储地址int *p;int a=90;p=&a;//指针变量p指向变量a*p=10;//a的值就变为10了,这时候*的作用是访问指针变量指向的存储空间,不正确写法p=203>.使用注意,在使用之前一定要初始化4>.指针是什么类型就去对应字节的数据2、指针和数组的关系int ages[5];int *p;p=ages;数组元素的访问方式1>.数组名[下标]  age[i]2>.指针变量名[下标]  p[i]3>.*(p+i)
#include<stdio.h>int main(){int ages[5]={9,4,5,6,8};int *p;p=&ages[0];//指向首元素printf("%d\n",p[2]));for(int i=0;i<5,i++){printf("ages[%d]=%d\n",i,p[i]));}return 0;}
3、指针与字符串
#include<stdio.h>int main(){char name[]="it";//字符串变量char name2="it";//指针name2指向字符串首地址printf("%s\n",name2);//全部输出printf("%c\n",*name2);//只输出首字符return 0;}
*内存:常量、堆(存放对象)、栈(存放局部变量)
*定义字符串的2种方式
1>.利用数组
char name[]="it";//字符串里面的字符,可修改
2>.利用指针
char *name="it";//字符串是一个常量字符串,不可改

*字符串数组
char *names[5]={"ada","ewwrfw","qwds"};//一维字符串数组
char *names[5][10]={"ada","ewwrfw","qwds"};//二维字符串数组
4、指向函数的指针
*定义

#include<stdio.h>void test(){printf("调用了test函数\n");}int main(){//(*p)是固定写法,代表指针p指向的函数,右边的()代码指针p指向的函数没有形参void (*p)();p=test;//指针p指向test函数p();或者(*p)();间接调用函数test();//直接调用函数return 0;}




















































0 0
原创粉丝点击