博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符串与指针
阅读量:5293 次
发布时间:2019-06-14

本文共 1371 字,大约阅读时间需要 4 分钟。

字符串与指针

1、字符串的表示形式:

数组形式:

char string[] = “hello world"; //栈(局部)

字符指针形式:

char *str = “hello world"; //文字常量区

数组形式与字符指针形式都是字符串的表示形式,但是这两种表示形式大不相同。

下面以数字形式字符串char string[] = “hello world"; 与指针形式字符串char *str = "hello world";为例:

1、储存方式:(1)字符数组由若干元素组成,每个元素存放一个字符,(2)而字符指针变量只存放字符串的首地址,不是整个字符串。2、存储位置:(1)数组是在内存中开辟了一段空间存放字符串;(2)而字符指针是在文字常量区开辟了一段空间存放字符串,将字符串的首地址付给指针变量str。3、赋值方式:

对与数组,下面的赋值方式是错误的:

char str[10];str="hello";

而对字符指针变量,可以采用下面方法赋值:

char *a;a="hello";4、可否被修改:(1)指针变量指向的字符串内容不能被修改,但指针变量的值(即存放的地址或者指向)是可以被修改的;

例一:指针变量指向的字符串内容不能被修改

char *p = "hello"; //字符指针指向字符串常量*p = 'a'; //错误,常量不能被修改,即指针变量指向的字符串内容不能被修改说明:定义一个字符指针指向字符串常量“hello”,修改指针变量指向的字符串的内容,即*p = 'a',发生错误,指针变量指向字符串常量,而常量字符串存在文字常量区,这段空间中的内容为只读内容,不能被修改,即指针变量指向的字符串内容不能被修改。

例二:指针变量的值可以被修改

char *p = "hello"; //字符指针指向字符串常量char ch = 'a';p = &ch; //指针变量指向可以改变说明:定义一个字符指针指向字符串常量“hello”,同时定义一个字符变量ch,改变指针变量的指向,即让p指向字符变量ch,这样是可以的,即指针变量的指向是可以改变的。(2)字符串数组内容可以被修改,但字符串数组名所代表的字符串首地址不能被修改例子:定义了一个数组buf,编译器在编译时为它分配内存单元,有确定的地址,此例子中为0X0034FDCC,给buf赋不同的值,字符串数组数组名所代表的字符串首地址没有改变,一直为0X0034FDCC。

5、初始化:定义了一个数组,在编译时为他分配内存单元,他有确定的地址;而在定义一个字符指针变量时,最好将其初始化,否则指针变量的值会指向一个不确定的内存段,将会破坏程序,以下方式是允许的:char str[10];scanf("%s", str); //或使用字符串拷贝函数进行拷贝赋值以下方式不推荐,是很危险的:char *p; //指针变量未初始化,指向一个不确定的内存段scanf("%s", p);以下方式是推荐使用的:char *p = NULL;p = (char *)malloc(10);scanf("%s", p); //或使用字符串拷贝函数进行拷贝赋值

转载于:https://www.cnblogs.com/mhq-martin/p/11427416.html

你可能感兴趣的文章
jquery对id中含有特殊字符的转义处理
查看>>
DP学习之路(1) 01背包
查看>>
获取元素样式信息于三中获取方式的区别
查看>>
测试主要环节
查看>>
08-17工作总结
查看>>
遇麻烦,Win7+Ubuntu12.10+Archlinux12.10 +grub
查看>>
基本高精度模板
查看>>
SqlBulkCopy大批量导入数据
查看>>
Windows Workflow Foundation 入门
查看>>
chrome(谷歌浏览器)“无法从该网站添加应用、扩展程序和用户脚本”问题
查看>>
HTTP协议 (四) 缓存
查看>>
python学习之random
查看>>
使用onclick跳转到其他页面/跳转到指定url
查看>>
【转载】测试计划模板
查看>>
pandas 修改指定列中所有内容
查看>>
ubuntu18.04 复制或剪切某文件夹下的前x个文件到另一个文件夹下
查看>>
input的value中有特殊字符
查看>>
字符串压缩
查看>>
用Lua定制Redis命令
查看>>
小程序-canvas在IOS手机层级最高无法展示问题
查看>>