---字符串

1.字符串

"jack" == 'j' + 'a' + 'c' + 'k' + '\0'   用数组保存字符串

char name[10] = "jack";

printf(name);

2.字符串的一些定义

都是字符串(\0的ASCII码值是0)

char name[8] = "it";

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

char name3[8] = {'i','t','0'};(\0的ask码是0)

char name4[8] = {'i','t'};最好不要用此种方式写字符串

3.\0的作用

字符串结束的标记

4.常见错误

不算是一个字符串(只能说是一个字符数组)

char name5[] = {'i','t'};

5.输出方式

printf("%s",name); // 会从name这个地址开始输出字符,直到遇到\0为止

---strlen函数:计算字符串长度

1.strlen函数:计算字符串长度

1>计算的是字符数,并不是字数。一个汉字算作3个字符

2>计算的字符不包括\0

3>从某个地址开始数字符的个数,直到遇到\0为止

2.strlen函数声明在string.h文件中

#include

int main()

{

strlen("haha");

char name2[] = {'0', '\0', '6'}; // 遇到'\0'就结束

int size = strlen(name2);

printf("%d\n", size);

return 0;

}

3.程序员编写一个程序的优先级:可读性->性能->精简(重构)

4.字符串练习(其中包含4种字符串遍历方式)

/*

编写一个函数char_contains(char str[],char c),

如果字符串str中包含字符c则返回数值1,否则返回数值0

*/

#include

#include

int char_contains(char str[], char c);

int main()

{

//int result = char_contains("itc8ast", '8');

char name[] = "itcast";

int result = char_contains(name, 'o');

printf("%d\n", result);

return 0;

}

// "itc"  '7'

int char_contains(char str[], char c)

{

int i = -1;

/*

i  3

str[++i] 'c'

c  '7'

*/

// 1.遍历整个字符串

while ( str[++i] != c && str[i] != '\0' ) ;

//return str[i] == '\0' ? 0 : 1;

return str[i] != '\0';

}

/*

int char_contains(char str[], char c)

{

int i = -1;

// 1.遍历整个字符串

while ( str[++i] )

{

// 如果发现某个字符等于参数c,直接返回1,退出函数

if (str[i] == c)

{

return 1;

}

}

// 2.说明str里面不包含字符c

return 0;

}*/

/*

int char_contains(char str[], char c)

{

int i = 0;

// 1.遍历整个字符串

while ( str[i] != '\0' )

{

// 如果发现某个字符等于参数c,直接返回1,退出函数

if (str[i] == c)

{

return 1;

}

i++;

}

// 2.说明str里面不包含字符c

return 0;

}*/

/*

int char_contains(char str[], char c)

{

// 1.遍历整个字符串

for (int i = 0; i

{

// 如果发现某个字符等于参数c,直接返回1,退出函数

if ( str[i] == c )

{

return 1;

}

}

// 2.说明str里面不包含字符c

return 0;

}*/

5.字符串数组

char name[] = "jack";

char name1[] = "rose";

char name2[] = "jim";

char name3[] = "jake";

char names[2][10]= {"jack", "rose"};

//printf("%s\n", names[0]);

//printf("%c\n", names[0][3]);

char names2[2][10] =

{

{'j', 'a', 'c', 'k', '\0'},

{'r', 'o', 's', 't', '\0'}

};

---指针(任何指针都占用8个字节的存储空间)

一、 指针的定义与赋值

格式:变量类型 * 变量名

1、 先定义后赋值:

int a = 10;

int *p;

p = &a;

2、 定义的同时赋值:

int a = 10;

int *p = &a;

注意:int *p;   p = 10;  //p指向的地址是10

int *p;   *p = 100;  //p指向的地址里面的数据是100

int *p;   *p = &a;  //p指向的地址里面的数据是a的地址

%p输出指针里面存储的地址值。

不能乱用,比如:int a = 10;    float *p = &a;

指针的唯一作用:存储地址,访问对应的存储空间:取值或复值。

二、 指针变量所占用的存储空间

不管指针指向什么类型的数据,它存储的都是内存地址。所以所有的指针变量所占的空间都是一样的,与指针变量的类型无关,只跟编译器有关。在Xcode中,指针变量占8个字节(因为内存地址都是很大的数字)。

三、 为何指针变量要分类型

1、指针可以用于指向任何类型的变量(数组、结构体、其他指针等),这就需要定义不同类型的指针。如果指针没有指向相应类型的变量,那么运算结果就很有可能是错的。

2、在数组中经常会使用*(p+i)这种形式,指针可以和数字相加,指针的类型决定了当指针+1时跳过多少个字节。当为int类型时,就会跳过四个字节;当为char类型时,就会跳过一个字节。

四、 为什么要使用指针

1、 在函数调用时使用指针,可以让形参复制实参的地址,从而在函数内部修改外部变量的值。

2、 指针可以让函数返回多个值。

五、 指针与函数

1、 数组元素的访问方式

1> ages[i]  //数组名[下标]

2> p[i]   //指针变量名[下标]

3> *(p + i)  //指针加上一个数值

2、 数组指针和函数参数

1)用函数操作一个数组,可以使用数组作为函数参数,也可以使用数组指针作为函数参数。调用时,实参都是数组名,因为数组名就是数组首元素的地址。

注意:两种方式中函数参数的本质都是一个指针,所以如果在函数内部使用sizeof(数组名),获得的总是8个字节(即指针的大小),而不是整个数组所占的字节数。

六、 指针与字符串

1、 字符串的定义

1> 利用数组   char name[ ] = "itcast";

特点:这样定义的字符串其实是一个变量字符串,里面的字符是可以修改的。

2> 利用指针   char *name = "itcast";

特点:这样定义的字符串其实是一个常量字符串,里面的字符是不能修改的。

2、 字符指针数组

定义一个字符指针数组:

char *name[2] = {"jack","rose"};

其实用字符串数组也可实现上面的存储:

char name[2][10] = {"jack","rose"};

七、 返回指针的函数

指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的。

返回指针的函数的一般形式为:类型名 * 函数名(参数列表)。

八、 指向函数的指针

1、 为什么指针可以指向一个函数

函数作为一段程序,在内存中也要占据部分存储空间,它也有一个起始地址,即函数的入口地址。函数有自己的地址,那就好办了,我们的指针变量就是用来存储地址的。因此,可以利用一个指针指向一个函数。其中,函数名就代表着函数的地址。

2、 指向函数的指针的定义

定义的一般形式:函数的返回值类型 (*指针变量名)(形参1, 形参2, ...);

3、 使用注意:

1> 由于这类指针变量存储的是一个函数的入口地址,所以对它们作加减运算(比如p++)是无意义的

2> 指向函数的指针变量主要有两个用途:调用函数,将函数作为参数在函数间传递。

---指针和数组

1.数组元素的访问方式

int ages[5];

int *p;

p = ages;

1> 数组名[下标]  ages[i]

2> 指针变量名[下标] p[i]

3> *(p + i)

2.指针变量+1,地址值究竟加多少,取决于指针的类型

int *   4

char *  1

double * 8

int main {

int ages[5] = {10,9,8,67,56];

int *p;

//指针变量p指向了数组的首元素

p = &ages[0];

//数组名就是数组的地址,也是数组首元素的地址

//p = ages;

/*

p ----->&ages[0]

p + 1---->&ages[1]

p + 2------>&ages[2]

p + i-------->&ages[i]  */

//printf("%d\n",*(p + 2));

for(int i;i<5;i++){

printf("ages[%d] = %d\n",i,*(p + i));

return 0;

}

---指针和字符串

char *name = "it";//指针变量指向了字符串的首字母

1.内存的存储方式:

1>常量区  存放一些常量字符串

2>堆

3>栈      存放局部变量

2.定义字符串的2种方式

1>利用数组

char name[] = "fsfsaf";

特点:字符串里面的字符是可以修改的

使用场合:字符串的内容需要经常修改

2>利用指针

char *name = "faffsf";

特点:字符串其实是一个常量字符串,里面的字符是不能修改的

场合:字符串的内容不需要修改,而且这个字符串经常使用

指针数组(字符串数组)

char *name[5] = {"jack","rose","jake"};

3.指针和字符串练习

/*

(不包括\0)

编写一个int string_len(char *s),返回字符串s的字符长度

*/

#inclue

int string_len(char *s);

int main()

{

//char *name = "itcast";

// 男 \u434\u4343\u434

int size = string_len("tre777");

printf("%d\n", size);

return 0;

}

int string_len(char *s)

{

// 1.定义一个新的指针变量指向首字符

char *p = s;

/*

while ( *s != '\0' )

{

s++;

}*/

while ( *s++ ) ;

return s - p - 1;

}

/*

int string_len(char *s)

{

// 记录字符的个数

int count = 0;

// 如果指针当前指向的字符不是'\0'

// 首先*s取出指向的字符

// 然后s++

while ( *s++ )

{

// 个数+1

count++;

// 让指针指向下一个字符

//s = s + 1;

//s++;

}

return count;

}

*/

/*

int string_len(char *s)

{

// 记录字符的个数

int count = 0;

// 如果指针当前指向的字符不是'\0'

while ( *s != '\0')

{

// 个数+1

count++;

// 让指针指向下一个字符

//s = s + 1;

s++;

}

return count;

}*/

c语言在输出字符串时可以用指针,C语言—字符串、指针相关推荐

  1. 解决java以UTF-8输出中文时,Excel打开多语言文件乱码但是记事本打开却正常的问题

    解决java以UTF-8输出中文时,Excel打开多语言文件乱码但是记事本打开却正常的问题 public static boolean exportCsv(File file, List dataLi ...

  2. c语言编计分秒时的程序,用c语言编写程序,用于c51单片机四位共阴数码管显示,显示分秒的计时器。...

    匿名用户 1级 2014-05-07 回答 /*************************************************************************** 标 ...

  3. c语言中输出1st,高等学校计算机等级考试C语言模拟试题1st-all.doc

    高等学校计算机等级考试C语言模拟试题1st-all 上海市高等学校计算机等级考试C语言模拟试题 学院 _____________ 班级 __________ 姓名 __________ 学号 ____ ...

  4. C语言关闭日志文件时忘了将日志文件全局变量指针置为NULL

    C语言写了一个write_log函数以写日志,写了一个close_log_file函数以关闭日志,声明了一个日志文件全局变量文件指针plogFile. write_log中首先判断plogFile是否 ...

  5. python的字符串包括哪些_python公开课|Python字符串包含什么,我们应该怎么用

    [摘要]在这个科学技术高速发展的时代,越来越多的人都开始选择学习编程软件,那么首先被大家选择的编程软件就是python,也用在各行各业之中,并被大家所熟知,所以也有越来越多的python学习者关注py ...

  6. 怎么比较字符串java_如何在Java中比较字符串?

    在本文中,优锐课将带你学习如何比较字符串以及使用等于(=)运算符比较字符串时发生的问题. 介绍 字符串是Java中的特殊类.我们在Java程序中定期使用String,因此比较两个字符串是Java中的一 ...

  7. C语言试题六十二之请编写函数fun除了字符串前导和尾部的*号之外,将串中其他*号全部删除。形参h已指向字符串第一个字母,形参p已指向字符串中最后一个字母。在编写程序时,不得使用c语言提供的字符串函数。

    1. 题目 请编写函数fun除了字符串前导和尾部的*号之外,将串中其他*号全部删除.形参h已指向字符串第一个字母,形参p已指向字符串中最后一个字母.在编写程序时,不得使用c语言提供的字符串函数. 比如 ...

  8. c 语言输出字符用什么作用是什么,C语言中输出字符串用什么符号

    C语言中输出字符串用双引号. (推荐教程:c语言教程) 详细解读: 在C语言中,有两个函数可以在控制台(显示器)上输出字符串,它们分别是: puts():输出字符串并自动换行,该函数只能输出字符串. ...

  9. c语言输出字符串用什么符号,C语言中输出字符串用什么符号_后端开发

    php中字符串如何转16进制_后端开发 ​在php中可以使用"bin2hex()"函数将字符串转换成16进制,该函数用于字符串转换成16进制,其语法是"bin2hex($ ...

  10. c语言编程输出字符串,C语言如何输入和输出字符串

    C语言如何输入和输出字符串 发布时间:2020-11-16 17:22:03 来源:亿速云 阅读:165 作者:小新 这篇文章主要介绍了C语言如何输入和输出字符串,具有一定借鉴价值,需要的朋友可以参考 ...

最新文章

  1. select,InnoDB为啥会阻塞insert?
  2. ASP.NET 动态输出Javascript 文本格式换行问题 [ASP.NET | C# | Response]
  3. JAVA中怎么设置文本域位置_java – 如何在JTextArea中更改文本的位置
  4. 艾拉物联CEO :物联网时代的到来让安全问题显得尤为突出
  5. IE6的重定向页面无法跳转解决
  6. echarts散点图搭配时间轴
  7. Linux服务器时间同步那些事
  8. python飞机大战怎么将图片保存_Python飞机大战完整素材包(字体音乐图片)
  9. 如何给服务器重装系统时,安装Raid驱动
  10. TkMybatis的使用
  11. 理解加载class到JVM的时机
  12. arcgis 发布服务
  13. 数学系列 (二)自然数、分数、小数、算数、代数
  14. LLVM创始人Chris Lattner回顾展望编译器
  15. MySQL(六)事物(ADID,四种隔离级别)(七)索引(索引测试,原则)
  16. 谈谈软件开发模式:瀑布与敏捷
  17. 人工智能学python还是c_考虑到未来人工智能的发展,应该学习C++/C语言还是Python语言?...
  18. arcgis操作导入点线表
  19. notifyDataSetChanged使用总结
  20. python数据分析建模-十分钟搞懂“Python数据分析”

热门文章

  1. 《JAVA与模式》之解释器模式
  2. Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案
  3. 拓端tecdat|R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例
  4. 拓端tecdat|t-GARCH 模型的贝叶斯推断理论
  5. 拓端tecdat|R语言使用Metropolis-Hastings采样算法自适应贝叶斯估计与可视化
  6. 顺序表操作集 (20 分)
  7. Java IO 系统(一)
  8. mysql查询配置变量
  9. 采用SVM和神经网络的车牌识别(流程图及详细解释)
  10. 为伍兹乳腺X线摄影数据集开发神经网络