最近在学指针,感觉内容繁多,概念不好掌握,除了上自己班的编程课,还去蹭了别人班的课,感觉很有收获,担心自己不及时总结就会忘了,也方便如后复习回顾和学习交流。
首先,先说一个非常基础的概念,字符数组的赋值操作。
给字符数组赋值分两种情况,单字符赋值和字符串赋值。
单字符赋值:可通过数组下标方式或指针方式,引用数组元素,进行赋值
<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.youkuaiyun.com/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"};
而只能对字符数组的各元素逐个赋值。
从以上几点可以看出字符串指针变量与字符数组在使用时的区别,同时也可看出使用指针变量更加方便。
当一个指针变量在未取得确定地址前使用是危险的,容易引起错误。
一个错误的例子,如下:

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





