黑马程序员-06.C字符串和指针
来源:互联网 发布:淘宝收藏代码在线生成 编辑:程序博客网 时间:2024/06/03 16:46
------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1.字符串
1)C语言中本来没有字符串的存在,但是因为指针的存在,对字符串的处理非常的得心应手。
字符串可以看做是一个字符数组,字符串字量没有统一的长度,在编译的时间被编译器加上了一个‘\0’,按照数组的方式储存。
2)\0 的作用
.字符串结束的标记
.printf("%s", name2);
会从name2这个地址开始输出字符,直到遇到\0为止
3)字符串长度的计算
strlen函数声明在string.h文件中
strlen函数:计算字符串长度
.计算的是字符数,并不是字数。一个汉字算作3个字符
.计算的字符不包括\0
.从某个地址开始数字符的个数,直到遇到\0为止
4)编写一个函数char_contains(char str[],char c),如果字符串str中包含字符c则返回数值1,否则返回数值0
2.指针
1)指针的定义格式
变量类型 * 变量名;
int *p;
指针变量p前面的int:指针变量p只能指向int类型的数据
2)指针变量只能存储地址
3)指针就一个作用:能够根据一个地址值,访问对应的存储空间
4)指针变量p指向了变量a
5)定义变量时的*仅仅是一个象征,没有其他特殊含义
6)任何指针都占用8个字节的存储空间
7)指针的使用注意
1>不建议的写法, int *p只能指向int类型的数据
2>指针变量只能存储地址
int *p;
p = 200;
3>指针变量未经过初始化,不要拿来间接访问其他存储空间
int *p;
printf("%d\n", *p);
4>不正确的写法
int a;
a = 10;
*p = &a;不正确的写法
p = &a;
5)指向指针的指针
6)指针的内存分析图
8)清空指针
1>p =0;
2>p = NULL;
清空指针后,不能再间接访问其他存储空间
3.指针和数组
1)数组元素的访问方式
int ages[5];int *p;p = ages;1> 数组名[下标] ages[i]2> 指针变量名[下标] p[i]3> *(p + i)
2)指针变量+1,地址值究竟加多少,取决于指针的类型
int * 4char * 1double * 8
使用指针遍历数组
- #include <stdio.h>
- int main()
- {
- int ages[5] = {10, 9, 8, 67, 56};
- intint *p;
- // 指针变量p指向了数组的首元素
- p = &ages[0];
- // 数组名就是数组的地址,也是数组首元素的地址
- //p = ages;
- /*
- p ---> &ages[0]
- p + 1 ---> &ages[1]
- p + 2 ---> &ages[2]
- p + i ---> &ages[i]
- */
- for (int i = 0; i<5; i++) {
- printf("ages[%d] = %d\n", i, *(p+i));
- }*/
1)数组元素的访问方式
int ages[5];int *p;p = ages;1> 数组名[下标] ages[i]2> 指针变量名[下标] p[i]3> *(p + i)
2)指针变量+1,地址值究竟加多少,取决于指针的类型
int * 4char * 1double * 8
使用指针遍历数组
- #include <stdio.h>
- int main()
- {
- int ages[5] = {10, 9, 8, 67, 56};
- intint *p;
- // 指针变量p指向了数组的首元素
- p = &ages[0];
- // 数组名就是数组的地址,也是数组首元素的地址
- //p = ages;
- /*
- p ---> &ages[0]
- p + 1 ---> &ages[1]
- p + 2 ---> &ages[2]
- p + i ---> &ages[i]
- */
- for (int i = 0; i<5; i++) {
- printf("ages[%d] = %d\n", i, *(p+i));
- }*/
4.指针与字符串
1)数组元素的访问方式
int ages[5];int *p;p = ages;1> 数组名[下标] ages[i]2> 指针变量名[下标] p[i]3> *(p + i)
2)指针变量+1,地址值究竟加多少,取决于指针的类型
int * 4char * 1double * 8
使用指针遍历数组
- #include <stdio.h>
- int main()
- {
- int ages[5] = {10, 9, 8, 67, 56};
- intint *p;
- // 指针变量p指向了数组的首元素
- p = &ages[0];
- // 数组名就是数组的地址,也是数组首元素的地址
- //p = ages;
- /*
- p ---> &ages[0]
- p + 1 ---> &ages[1]
- p + 2 ---> &ages[2]
- p + i ---> &ages[i]
- */
- for (int i = 0; i<5; i++) {
- printf("ages[%d] = %d\n", i, *(p+i));
- }*/
定义字符串的2种方式
1> 利用数组
1> 利用数组
char name[] = "itcast";* 特点:字符串里面的字符是可以修改的* 使用场合:字符串的内容需要经常修改
2> 利用指针
char *name = "itcast";//指针变量name指向字符串的首字符* 特点:字符串其实是一个常量字符串,里面的字符是不能修改* 使用场合:字符串的内容不需要修改,而且这个字符串经常使用
5.指向函数的指针
1)定义指向函数的指针
double (*p)(double, char *, int);p = haha;
或者
double (*p)(double, char *, int) = haha;
2)如何间接调用函数
1> p(10.7, "jack", 10);2> (*p)(10.7, "jack", 10);
- #include <stdio.h>
- void test()
- {
- printf("调用了test函数\n");
- }
- int main()
- {
- // (*p)是固定写法,代表指针变量p将来肯定是指向函数
- // 左边的void:指针变量p指向的函数没有返回值
- // 右边的():指针变量p指向的函数没有形参
- void (*p)();
- // 指针变量p指向了test函数
- p = test;
- (*p)(); // 利用指针变量取出函数再调用
- p(); //简化写法
- test(); // 直接调用函数
1)数组元素的访问方式
int ages[5];int *p;p = ages;1> 数组名[下标] ages[i]2> 指针变量名[下标] p[i]3> *(p + i)
2)指针变量+1,地址值究竟加多少,取决于指针的类型
int * 4char * 1double * 8
使用指针遍历数组
- #include <stdio.h>
- int main()
- {
- int ages[5] = {10, 9, 8, 67, 56};
- intint *p;
- // 指针变量p指向了数组的首元素
- p = &ages[0];
- // 数组名就是数组的地址,也是数组首元素的地址
- //p = ages;
- /*
- p ---> &ages[0]
- p + 1 ---> &ages[1]
- p + 2 ---> &ages[2]
- p + i ---> &ages[i]
- */
- for (int i = 0; i<5; i++) {
- printf("ages[%d] = %d\n", i, *(p+i));
- }*/
------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
0 0
- 黑马程序员-06.C字符串和指针
- 黑马程序员--c语言:字符串、指针
- 黑马程序员——C语言------指针和一维数组、字符串、函数
- 黑马程序员------C语言-----数组和字符串
- 黑马程序员---c语言 数组和字符串
- 黑马程序员 _4 C语言基础 数组,指针,字符串
- 黑马程序员--02C数组/字符串/指针
- 黑马程序员——C复杂数据类型--数组、字符串、指针
- 黑马程序员——ios基础---C语言:字符串、指针
- 黑马程序员——C语言之字符串指针
- 【黑马程序员】C语言字符串指针介绍及使用
- 黑马程序员--C语言自学笔记---10字符串、指针
- 黑马程序员——C语言------指针和指针变量
- 黑马程序员:c语言--指针
- 黑马程序员-C-指针类型
- 黑马程序员-C语言指针
- 黑马程序员---C语言指针
- 黑马程序员---C语言指针
- 实现ListView带多选框等状态控件实现Adapter出现紊乱
- SVN命令使用详解
- Linux如何实现镜像端口
- 进程与线程之间的联系与区别
- 怎么使用telnet入侵其他主机
- 黑马程序员-06.C字符串和指针
- CInternetSession的简单使用例子
- Highcharts 第二课setOptions(二)
- Scrapy复习
- VC项目配置基础 (VC6.0 和VC2005)
- SQL Server错误代码大全及解释
- STM32F103RB的 Bootloader软件安全设计方案
- SQL Server report server使用
- Java基础:面向对象