黑马程序员技术交流社区

标题: 字符串 [打印本页]

作者: hugin    时间: 2016-9-23 08:45
标题: 字符串
//---------------------字符串
常见的两种方式:
char str[] = "abcd";   ---> 末尾自动追加 '\0'  //栈区
char *str = "abcd";    ---> 末尾自动追加 '\0'  //常量区

字符串是位于双引号中的字符序列

在内存中以"\0"结束,所占字节比实际多一个

"%s 占位符输出字符串
"%s  从给定的地址开始,输出字符直到遇到\0结束

注意:定义字符数组时,应确保数组长度比字符串长度至少多1('\0')

----------------------------------------

char str[5] = {'a','b','c','d','e'};  "有问题"  长度与内容不匹配

方法一:
char str[6] = {'a','b','c','d','e','\0'};

char str[] = {'a','b','c','d','e','\0'};  //长度为  :  6

方法二:
char str[6] = {'a','b','c','d','e'};  //定义的同时初始化,剩余没初始化是0

char str[] = {'a','b','c','d','e'};   "有问题"  //长度 : 5

另一种:
char str[6] = "abcde";

char str[] = "abcde";   //长度:   6


----------------------------------------

char ch[] = {'a','b','c','\0'};

char ch2[]= {"abc"};


char str[5];

str = "appl";  //  str数组名  是常量

str[0] = 'a';
......

#include <string.h>

strcpy(str,"appl");

str字符数组的字节数  > "appl"


//-------------------字符串的恒定性
"大前提: 是以字符指针的形式存储的字符串
char *str = "abcd";

1. 当我们以字符指针的形式存储字符串的时候,无论如何,字符串数据是存储在常量区的
并且 一旦存储到常量区中去 这个字符串的数组就无法更改

2. 当我们以字符指针的形式要将字符串数据存储到常量去的时候,并不是直接将字符串存储到常量区

而是先检查常量区是否有相同的内容的字符串
如果有,直接将这个字符串的地址拿过来返回
如果没有,才会将这个字符串数据存储在常量区

3. 当我们重新为字符指针初始化1个字符串的时候
并不是修改原来的字符串 而是重新的创建了1个字符串


char ch[] = "jack";

char *str = "rose";

ch[0] = 'a';
str[0] = 'a';

//-------------------------------指针

int a = 10;

int* p = &a;   //  类型: 指针类型 :  int *


*p = 20;

char ch = 'a';

char* p1 = &ch;  // 类型 char *

能存地址的数据类型  ---->   地址

使用指针好处

a.为函数提供修改调用变量的灵活手段;

b.让函数有多个返回值

c.可以改善某些子程序的效率


变量的存取方式 存取方式分为两种: 直接存取 和 间接存取


# 直接存取:变量的赋值和取值(通过变量名进行存取值)

int num = 100;

num = 200;


# 间接存取:通过指针(地址)间接操作完成。

int num = 100;

int *p = &num;   //p指向了 num 的地址

*p = 99;




作者: Doublek    时间: 2016-9-23 13:29
总感觉跟自己学的有区别
作者: 邱中林    时间: 2016-9-24 22:27
可以,已收下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2