字符串数组与字符串指针

本文介绍了字符数组与字符串指针在C语言中的使用区别,包括字符数组的赋值方法(单字符赋值、字符串初始化、逐个赋值、strcpy函数)以及字符串指针的特性。重点讨论了字符串指针与字符数组在存储和运算上的差异,如字符串指针可以直接赋值字符串常量的首地址,而字符数组则不能。同时,文章还举例说明了错误的赋值方式可能导致的问题,如未分配内存直接赋值字符串。最后,文章总结了字符串常量的内存分配和类型,并提供了相关代码示例进行讲解。
摘要由CSDN通过智能技术生成

        最近在学指针,感觉内容繁多,概念不好掌握,除了上自己班的编程课,还去蹭了别人班的课,感觉很有收获,担心自己不及时总结就会忘了,也方便如后复习回顾和学习交流。



        首先,先说一个非常基础的概念,字符数组的赋值操作

        给字符数组赋值分两种情况,单字符赋值字符串赋值

单字符赋值:可通过数组下标方式或指针方式,引用数组元素,进行赋值

<span style="font-size:18px;">	//数组下标法
        char a[5],ch='a';
	int i;
	for(i=0;i<5;i++)
	a[i]=ch+i;//可通过数组下标引用数组元素,完成赋值
	for(i=0;i<5;i++)
	printf("%d",a[i]);<span style="color:#009900;">//这里输出的数据类型如果说%c,那么输出的就是abcde,如果是%d则输出979899100101即对应的ASCII码值</span>
	return 0;
 
        //指针        
        char a[5],ch='a';
	int i;
        char *p;
        for(p=a;p<a+5;p++)
        *p=ch++;

</span>
字符串赋值:可使用string.h头文件中的字符串操作函数进行赋值,如:
<span style="font-size:18px;">char a[10];
strcpy( a, "abcdefgh");
sprintf(a, "%s", "abcdefgh");</span>

注意:数组在定义时,可以同时进行初始化,但定义完成后,就不能按初始化的形式对其赋值了,如:

        char a[10]="abcdefgh"; //这样可以
        a="abcdefgh"; //这样是错误的!a是数组名,是一个静态数据:数组首地址值,可以看作是个常数,不能再被改变。

即不能在赋值语句将一个字符串常量直接给一个字符数组赋值!


(以下引自http://www.tuicool.com/articles/nYfuAr

怎么给这个数组赋值呢?

1、定义的时候直接用字符串赋值

char a[10]="hello";

注意:不能先定义再给它赋值,如char a[10]; a[10]="hello";这样是错误的!

2、对数组中字符逐个赋值

char a[10]={'h','e','l','l','o'};

3、利用strcpy

char a[10]; strcpy(a, "hello");

(以上)

(当然,也可以这样 char a[ ]="hello";)



下面一个很重要的话题就是关于字符串指针与字符数组的问题http://blog.csdn.net/okliujieko/article/details/6821321 这个blog里说的比较详细可以看看,下面引用了其中最基础的概念)


 

    用字符数组和字符指针变量都可实现字符串的存储和运算。但是两者是有区别的。在使用时应注意以下几个问题:

1.     字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。

2.     对字符串指针方式

char *ps="C Language";

可以写为:

    char *ps;

ps="C Language";

而对数组方式:

    static char st[]={"C Language"};

不能写为:

    char st[20];

    st={"C Language"};

而只能对字符数组的各元素逐个赋值。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值