数组字符串和指针字符串

programmer-home programmer-home     2023-03-17     436

关键词:

在C语言中,表示一个字符串我们可以用数组如char str[] = "abc",也可以用指针char *str = "abc",那二者有何区别呢?

 

1、数组字符串存放在全局数据区或栈区,可读可写;指针字符串存放在常量区,可读不可写。

数组字符串:
char str[] = "abcd";
puts(str);       // 可读
str[0] = ‘m‘;    // 可写

指针字符串:
char *str = "abcd";
puts(str);       // 可读
str[0] = ‘m‘;   // 错误,不可写

 

2、字符串常量不可以直接赋值给数组名;但可以直接赋值给字符指针。

数组字符串:
char str[10];
str = "abcd";     // 错误,不可赋值。但可以用strcpy(str, "abc")来赋值。

指针字符串:
char *str;
str = "abcd";     // 正确

 

之所以产生这种现象,是因为双引号在编译过程中提供了如下功能:

(1)申请了内存空间(常量区),存放字符串;
(2)在字符串末尾加上‘‘;
(3)返回一个地址;
数组str[10]和指针*str中的str都是指地址,但数组的地址是一个常量,所以不可进行赋值,即将一个值(地址,由双引号申请的地址)赋给一个常量(常量地址);但指针是一个变量,所以可以被赋值。

使用数组和指针输入字符串

】使用数组和指针输入字符串【英文标题】:Enteringastringofcharactersusingarraysandpointers【发布时间】:2010-02-1215:15:09【问题描述】:好的,伙计们,我是初学者,正在尝试使用指针将字符串输入到char数组中......然后显示我写的内容... 查看详情

字符数组和字符指针的差别

...[80]="Hello"; //错误。仅仅能挨个元素进行赋值或者使用字符串函数strcpy(str1,str2)char*p;p="Hello"; //正确。由于是变量能够指定指向哪个字符串 查看详情

字符数组和指针的基本混淆

】字符数组和指针的基本混淆【英文标题】:characterarraysandpointersbasicconfusion【发布时间】:2015-06-1509:26:23【问题描述】:我是指针的初学者。完成整数数组和指针后,我转移到字符数组和指针。我期待相同的结果,但它很奇怪... 查看详情

字符串指针和指针数组输出(代码片段)

字符串指针和指针数组输出char*a="perseverance";printf("%s\\n",a);//输出结果:perseveranceprintf("%c\\n",*a);//输出结果:p注意:这里使用printf("%s\\n",*a);会报错,原因是字符串本身 查看详情

第6章数组指针与字符串指针的概念定义和指针运算

  查看详情

指针系统学习5-对使用字符指针变量和字符数组的讨论(代码片段)

虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们二者之间是有区别的,不应混为一谈……主要概括起来有以下几点:1.字符数组由若干个元素组成,每个元素中 放一个字符,而字符指针变量中存放的是... 查看详情

c字符数组和字符指针

constchar*string="abcd";charstring[]="abcd";第一种称为字符串常量,字符串存储在常量区,由字符指针进行访问,但是不能够修改第二种是字符串数组,相当于创建char类型的数组,每个元素放入单个字符,结尾默认‘\\n’,可以用sizeof验... 查看详情

数组指针和字符串(代码片段)

...大纲外加教材来小小的自我总结一下第六章数组、指针和字符串 6.1数组 数组的初始化时,第一维的下标个数可以不用显式说明:inta[2][3]=1,2,3,4,5,6;inta[][3]=1,2,3,4,5,6;  上面两种等价。数组作为函数参数 1voidtest(inta[][4... 查看详情

字符数组和字符串指针区别(代码片段)

字符数组和字符串指针区别字符数组字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。字符串指针本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存... 查看详情

C - 字符数组和字符指针

】C-字符数组和字符指针【英文标题】:C-chararrayandcharpointer【发布时间】:2015-08-1211:13:21【问题描述】:为什么我不能定义一个数组char**pp="123","456","789";但我可以将其定义为char*[]并将其发送到将其作为char**接受的函数char*pp[]="123... 查看详情

如何使用交换函数和指针反转字符串数组? (C++)

】如何使用交换函数和指针反转字符串数组?(C++)【英文标题】:Howtoreverseastringarrayinplaceusingaswapfunctionandpointers?(C++)【发布时间】:2018-03-2001:52:19【问题描述】:我的任务是反转一个字符串数组。我必须使用交换单个字符的交换... 查看详情

c复习

...(长度)]指针数组:保存指针的数组基本类型*变量名[长度]字符串指针和字符串数组有什么区别,请详细说明。char*p="12345678";//p是指针,p可以改变,sizeof(p):4,&qu 查看详情

c复习

...(长度)]指针数组:保存指针的数组基本类型*变量名[长度]字符串指针和字符串数组有什么区别,请详细说明。char*p="12345678";//p是指针,p可以改变,sizeof(p):4,&qu 查看详情

c复习

...(长度)]指针数组:保存指针的数组基本类型*变量名[长度]字符串指针和字符串数组有什么区别,请详细说明。char*p="12345678";//p是指针,p可以改变,sizeof(p):4,&qu 查看详情

数组字符串和指针字符串

在C语言中,表示一个字符串我们可以用数组如charstr[]="abc",也可以用指针char*str="abc",那二者有何区别呢? 1、数组字符串存放在全局数据区或栈区,可读可写;指针字符串存放在常量区,可读不可写。数组字符串:charstr[]="... 查看详情

c++核心-字符串向量和数组及指针详解

关于STL的内容后面再详细介绍,string和vector都是标准模板库的内容。数组是C的复合类型(可能只有我这么叫),一组数据,空间连续,所以由开始也有结束,从0开始,到n-1结束。注意别越界,因为是从0开始的。string和vector内部... 查看详情

golang数据一 (字符串数组和数组指针)

从如下几个方面介绍GO语言的数据1. 字符串2. 数组3. 切片4. 字典5. 结构字符串Go语言中的字符串是由一组不可变的字节(byte)序列组成从源码文件中看出其本身是一个复合结构string.go type stringStruct struct... 查看详情

字符数组和字符串指针的定义

...码的错误进行一下解释。并加强一下我们常用的两种定义字符串的方法的一些区别进行一下解释。书上的错误代码大概如下:#include<stdio.h>voidcopy(char*x,char*y){for(;*y!=‘ 查看详情