A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 初见兔儿哥 中级黑马   /  2015-8-3 00:37  /  699 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

学习目标
1.【掌握】字符串常用函数

2.【掌握】指针变量的声明

3.【掌握】指针变量的初始化

4.【掌握】函数与指针

5.【掌握】指针的数据类型

6.【掌握】多级指针

7.【掌握】指针与数组

一、字符串常用函数
puts和gets函数的声明在stdio.h头文件中,strcmp、strlen、strcpy、strcat函数的声明在string.h头文件中。

puts()函数

语法:puts(存储字符串数据的数组名);

输出一个字符串数据,并自动换行。不过只能输出字符串,并且不能使用格式控制符。


1
2
3
#include <stdio.h>
char name[] = "jack";
puts(name);//输出name字符数组里的字符串数据
gets()函数

语法:gets(存储字符串数据的数组名);

从控制台接收一个字符串数据,并存储在制定的字符数组之中。并且能读取到空格,scanf不能读取。不过gets只能接收字符串。无论是gets函数还是scanf函数在接收字符串的时候都是不安全的。如果输入字符串长度不够的时候,就会出问题。


1
2
3
#include <stdio.h>
char name[20];
gets(name);//接收20个字符内的字符串数据存储到name里
strcmp()函数

语法:strcmp(字符串1,字符串2);//返回int类型

根据每个字符对应的ASCII码依次比较两个字符串的每个字符的大小,如果比较到两个字符不同,就返回结果。如果返回正数,说明第一个字符串大,返回负数,说明第二个大。返回0,说明每个字符的ASCII相同。


1
2
3
4
5
#include <string.h>
char name[] = "afdaf";
char name1[] = "adfdg";
int cmp = strcmp(name,name1);//比较两个字符串的大小
printf("cmp = %d\n",cmp);//打印len = 5
strlen()函数

语法:strlen(字符串);

计算字符串的长度,一个一个字符计数,直到遇到'\0'为止。返回值是unsigned long。


1
2
3
4
#include <string.h>
char name[] = "afdaf";
unsigned long len = strlen(name);
printf("len = %d\n",len);//打印len = 5
strcpy()函数

语法:strcpy(字符串1,字符串2);

将字符串2拷贝到字符串1里,并且覆盖掉字符串1里的数据。如果字符串1放不下字符串2,就会保错。


1
2
3
4
5
#include <string.h>
char name[] = "afdaf";
char name1[] = "adfdg";
strcpy(name,name1);//会覆盖掉name
puts(name);//输出 adfdg
strcat()函数

语法:strcat(字符串1,字符串2);

将字符串2中的数据追加到字符串1后面,不会覆盖,只会拼接。如果字符串1放不下字符串2,就会保错。


1
2
3
4
5
#include <string.h>
char name[20] = "afdaf";
char name1[] = "adfdg";
strcat(name,name1);//不会覆盖掉name,只是name1连接到name屁股后面
puts(name);//输出 afdafadfdg
二、指针变量的声明
我们声明一个变量,实际是在内存中申请一个指定字节数的字节空间来存储数据,分配变量空间的时候,是从高地址到底地址来分配的。

概念:

1.变量的值:是存储在变量空间里的数据。

2.变量的地址:声明变量时申请到的字节空间中低字节的地址。

3.指针:变量的地址就叫做指针,地址就是指针,指针就是地址,只是换了个说法而已。

4.指针变量:其实也就是一个变量,只不过这个指针变量的值是个地址。

访问变量的两种方式:

1.直接访问:直接使用变量名来访问。

2.间接访问:让一个指针指向这个变量,通过这个指针可以间接的访问这个变量。

指针变量的声明

语法:

声明普通变量:数据类型 变量名;

声明指针变量:数据类型 *指针变量名;


1
2
3
int *p;//表示我们声明了一个指针变量,名字叫p,*只是说明这是一个指针变量,而不是普通变量。
int* p1;//*的位置可以挨着数据类型,也可以单独空一格
int * p2;
注意:


1
2
3
4
int *p3;//*在这里只是说明这是一个指针变量,而不是普通变量。
int *p4;//p4只能存储int类型的变量的地址
float *p5;//p5只能存储float类型的变量的地址
double *p6;//p6只能存储double类型的变量的地址
指针变量名也是一个标识符,也需要符合变量的命名规则和规范。一般情况下,我们变量名都以p开头,这样让别人一眼都能看出是指针变量。


1
2
int *p1,p2,p3;//是错误的,这样声明的只有p1才是指针变量,p2,p3是int类型普通变量
int *p1,*p2,*p3;//这才是正确的。
三、指针变量的初始化
指针变量中只能存储和指针变量类型相同的变量的地址,所以不能直接给指针变量赋值一个其他非地址的数据。使用&取地址运算符可以获取变量的地址。

语法:数据类型 *指针变量名 = 相同数据类型的变量的地址;


1
2
3
int num = 10;
int *p = &num;//获取num的地址并赋值给指针变量p
int *p1 = p;//将p中存储的值赋值给新声明的指针变量p1。等价于 int *p1 = &num;
通过指针变量访问指针变量指向的普通变量,使用*取值符来取出指针变量指向的普通变量。


1
2
3
4
int num = 10;
int *p = &num;//将num的地址赋值给指针变量p
*p = 20;//把20赋值给了p指向的num,这里的*p表示取出指针(p)的值(num的地址)的变量(num变量)。
printf("num = %d\n",num);//打印 num = 20
注意:

野指针:声明一个指针变量而没有初始化,这个指针变量的值是一个随机内存地址。通过这个指针去为指针指向的空间赋值的时候,就有可能改掉别人的数据,造成崩溃。

空指针:声明一个指针变量的时候不确定指向哪个变量,可以给他赋值NULL或者0(这里0就代表NULL,不是整型0),代表这个指针不指向任何空间。

5 个回复

倒序浏览
6666666666666
回复 使用道具 举报
笔记很详细,替你顶一个
回复 使用道具 举报
总结的很好啊
回复 使用道具 举报
学习了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马