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

灬F灬 灬F灬     2022-08-26     539

关键词:

今天在看书上的一段代码的时候发现有一段代码有问题,对于那段代码的错误进行一下解释。

并加强一下我们常用的两种定义字符串的方法的一些区别进行一下解释。

书上的错误代码大概如下:

#include<stdio.h>
void copy(char *x,char *y)
{
    for(;*y!=;x++,y++)
       *x=*y;
       *x=;
printf("%s ",a); }
int main() { char *a="Hello!"; char *b="World!"; copy(a,b); return 0; }

 

 

字符数组和字符串指针都可以用来存储字符串。

但是字符数组和字符串有本质的区别。

#include<stdio.h>
int main()
{
    char a[10]="Hello!";
    char *b="world!";
    printf("a=%x
",a);
    printf("&a[0]=%x
",&a[0]);
    printf("b=%x
",b);
    printf("&b=%x
",&b);
}

 

a=9ffe40
&a[0]=9ffe40
b=404000
&b=9ffe38

 通过输出我们可以看出来字符数组 a 是一个地址 这个地址就是这段字符数组的首地址 &a 和 &a[0] 都是字符数组的首地址。

而字符串指针 指针变量b 是用来存一段字符串的首地址 &b 就是对着这个指针变量中的数据存储的地址了。

我们对于字符数组可以进行单个字符的改变,因为字符数组就是一堆由字符组成的数组,所以我们对其中一个元素进行修改。

但是字符串指针就是将一个字符类型的指针变量指向了一段字符串,这段字符串是存储在静态数据,对于这些已经定义好的常量我们不能进行随意的修改。

char *a="Hello!";

char *a;
a="Hello!";

这两种的定义效果是一样的如果我们分开看就会看的更明白。

字符串指针指向的那一段字符串不能用其他字符串进行替换。

 

所以说到这里也就明白了书中程序的错误位置和原因了。

*a=*b;
*a=;

这两个语句都是错误的 字符串指针不能通过这种方式进行修改。这明显是一个错误的代码。

 

为了实现这种效果我可以有很多的写法在这里举几个例子:

#include<stdio.h>
void copy(char *a,char *b)
{
    a=b;
    printf("%s
",a);
 } 
 int main()
 {
     char *x="Hello!";
     char *y="World!";
     copy(x,y);
  } 
 

这个例子就是直接把b的地址赋给了a这样 a,b姐都指向了同一个字符串,同样起到了赋值的作用。

 

#include<stdio.h>
void copy(char a[],char b[])
{
    int i=0;
    for(i=0;i<sizeof(b);i++)
    {
        a[i]=b[i];
    }
    printf("%s
",a);
 } 
 int main()
 {
     char x[]="Hello!";
     char y[]="World!";
     copy(x,y);
  } 
 

这个方法就是定义的时候定义字符数组这样就可以实现一个字符一个字符的赋值了。

 

所以说书上的也不一定都对,编程这种东西永远没有唯一的正确答案,实现一个功能不同的人编都有不同的代码实现的方法也不相同。

所以多动动手,对每一个代码都抱有质疑的态度,没有绝对的权威,去自己摸索更多新的东西这样才能有更大进步,永远踩着别人的脚印走永远不能超过别人。

C - 字符数组和字符指针

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

指针与一维数组和二维数组以及字符串指针数组的学习笔记

...指针的关系,谈论了二维数组和指针之间的关系,讨论了字符串数组指针数组和指针之间的关系,代码中以给出定义的方法和简单的使用,但是有些使用方法并没有列出,如果需要,请自行加入printf调试即可。转贴请注明出处,... 查看详情

字符串数组与字符指针的区别

请简单说一下字符串数组与字符指针的区别?谢谢了!参考技术A字符指针变量和字符数组的区别:简单说一下:字符串数组是用来存放字符串的数组,在内存中占一段连续的单元。所占内存存放的是字符串。定义方法为:chara[N];N为常... 查看详情

对使用字符指针变量和字符数组的讨论(代码片段)

...个元素中放一个字符,而字符指针变量中存放的是地址(字符串第一个字符的地址)。2、赋值方式。对字符数组只能对各个元素赋值,不能用以下方法对字符数组赋值:charstr[20];str="IloveChina";而对字符指针变量,可以用如下方法... 查看详情

c语言数组(指针数组用法|菜单选择)(代码片段)

...示例一、指针数组用法(菜单选择)使用场景:用户输入一个字符串,判定该字符串是菜单中的哪个选项;定义指针数组,数组中存放着指针,每个指针指向字符串常量,字符串常量在全局区中的常量区;//指针数组,数组中存放着指针,每个... 查看详情

第二次作业(代码片段)

...型占用的内存空间都是8字节,和数组对比我觉得,数组字符串里的字符是可以修改的,而指针定义字符串里的内容不能修改。知道*和&是互逆的两个运算符;swap的作用是交换两个变量的值,在指针中定义一个数组,代表的是... 查看详情

c语言指针基本概念及其指针变量的定义是啥

...须赋初值,而指针在使用前必须赋初值。3、字符指针和字符串字符串是一个字符数组,字符串以‘\0’结束。printf函数的%s格式输出字符时,是从给定的地址开始,到遇上第一个‘\0’字符时结束。对字符指针初始化,是将... 查看详情

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语言提高内容目录

...据类型和变量内存四区(栈堆全局代码区)(2)指针和字符串操作指针强化字符串的基本操作字符串一级指针内存模型图字符串做为函数参数(3)二级指针多级指针二级指针的输入输出模型二级指针输入的三种内存模型多级指... 查看详情

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

数组-指针-字符串数组数组的定义与初始化类型符数组名[常量表达式];数组必须先定义,再使用数组名字是数组首元素的内存地址,是一个常量,不能被赋值数组可以作为函数的参数:形参会影响实参,一般数组长度也要作为... 查看详情

part6数组指针与字符串6.6指针与数组

数组是一组连续存储的同类型数据,可以通过指针的算术运算,使指针依次指向数组的各个元素,进而可以遍历数组。定义指向数组元素的指针:inta[10],*pa;pa=&a[0];或pa=a;经过上述定义及赋值后: *pa就是a[0],*(pa+1)就是a[1],...... 查看详情

字符指针和字符数组

2017年12月19日17:12:10字符指针和字符数组的整理 1.字符数组是由若干个元素组成,每个元素中存放的是一个字符,而字符指针变量中存放的是第一个字符的地址 2.char*a;a="IloveChina";指针变量可以赋值,但是数组名不可以这样... 查看详情

第1次作业

...组操作数组名(指针)作为函数参数(冒泡排序)指针和字符串的关系字符串和字符指针常用字符串处理函数作业要求一(20分)完成下列编程题目,每次上完课都会增加2-3道题目,并将编程过程记录在博客里:1)C高级第一次PT... 查看详情

第6章 数组指针与字符串数组的定义与初始化

  查看详情

指针函数和函数指针

我们一般用char类型的指针来定义字符串记住,字符串是全局变量   注意:我们来对上面做小规模的修改最后结果是这样的↓但只是警告,编译还是通过了,但没有任何输出意思就是说你的函数返回了局部变量的地址... 查看详情

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

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