目录
1.数组
1.一维数组和二维数组
数组可以在定义时对各元素赋初值,但不能用赋值语句对字符数组中全部元素整体赋值
eg:int a[10]={1,2,3,4};
定义数组时下标不可省,初始化时可以
数组名就代表数组元素的首地址
[ ]中只能放常量,赋值表达式,不可放变量
eg:int a[3][7]={{0,1,2},{0,3,4},{0,5,6,7}};
2.字符数组
eg:char a[10]={"fan gao"};与
char a[10]="fan gao";与
char a[10]={‘f’,‘a’,‘n’,‘g’,'a','o’,‘\0’};等价
字符串后面默认+\0,占一个位置
字符数组的函数(仅字符数组)
- 输入字符数组的函数gets
- 输出字符数组的函数puts
if用printf输出"i love china"则只能输出‘i’
but用puts函数输出这段话则可以完整输出
puts函数遇到\0立即停止
3.连接数组的函数strcat
strcat (字符数组1,字符数组2)
4.字符串复制函数strcpy
strcpy(字符数组1,字符串2)
5.字符串比较函数strcmp
strcmp(字符串1,字符串2)
=0是字符串1和字符串2相等
>0是字符串1大于字符串2
是利用字符的ASCII码值来比较的
6.测字符串长度函数
strlen(字符数组)
测量的是字符串的实际长度
2.指针
- int *p=&a;
p是指针变量,p指向a,*前面必须有int类的
将a的地址存放到p中。
- float *p;p=&a;
a是整型变量,系统会把&a的基类型改为float型.然后赋值给p.
- 指针值+1是让指针移动4个字节
- *p=1,的意思是把整数1赋值给p所指的变量
- *p1=*p2。p2所指向的元素赋值给p1指向的元素。
1.通过指针引用数组
int a[10]={1,3,5,7,9};
int *p;
p=&a[0];
- a[i]的地址
p+i ✌️ a+i
2. a[i]
*(p+i) ✌️ *(a+i)
是将a数组首元素的地址赋值给p.
- p指向数组的某个元素,则p+1指向的是数组的下一个元素.
- 两个地址无意义,如p1+p2无意义 ,但p1-p2有意义
eg:如p1指向的是a[7]
p2指向的是a[4]
则p1-p2=3。
- 如p指向a[0]。
则p++指向a[0]
则++p指向a[1]
- *和&运算级相同,结合方向是从右向左
- *和++运算级相同,结合方向从右向左
- &和*互相相消
2.通过指针引用字符串.
char *string;
string="i love China";
- 把字符串第一个元素的地址赋值给字符指针变量(字符串实际上是字符数组)
- 通过字符数组名和字符指针变量可以输出一个字符串,而对一个数值型数组,是不能这样输出的,因为变量名代表的是首元素的地址。
3.字符指针变量和字符数组
- 字符指针变量🉑,但字符数组不可
char *a;
a=“i love China!”
char string[14];
string[ ]=“i love China!”
👌string[0]=‘i’;
👌char string[14]=“i love China”;
- 字符数组中各元素的值是可以改变的(可以对它们再赋值),但字符指针变量指向的字符串常量中的内容是不可以被取代的
char *b=“i love China”
char a[14]=“house”
a[2]=‘i’
b[3]=‘v’ 非法,字符指针变量指向的字符串常量的内容不能改变。