Keil C51中有个字符串变量str,怎么转换成指针或数组?

2024年11月17日 00:22
有1个网友回答
网友(1):

首先纠正一下,C语言没有“字符串变量”这一说,也就是没有一个特定的变量用来存放我们所说的字符串(java语言有,通过String类来实现)。
通常我们所说的字符串其实是很多单个字符组成的,默认以转义字符‘\0’结尾。
这里还要说明一下,常量(数值常量或是字符常量)在内存当中是没有地方专门存放它们的,只能通过变量来存放。既然上面说了,字符串是很多的字符常量组成的,那想要保存它,只能通过数组来保存。比如字符串:china存放在一个数组里可以这样写:
char str[ ] = "china";
char str[ ] = {'c','h','i','n','a'};
上面的两种形式都可以,结尾没有加上'\0'结束符,编译时编译器会默认帮我们加。
现在来回答你的问题。既然字符串保存在数组中,那就要熟悉数组的用法,这里我就不详细说明了,
但是我想提醒的一点就是,数组在声明时可以一次性对全部元素赋初值(称作初始化),如果在声明的时候没有初始化,那以后只能一个个给数组元素赋值。比如:
char str[5]; //声明了一个长度为5的字符串(注意声明数组时数组长度一定是确定了的)
str[5] ="china"; //这句是错的,不能一次性引用数组,只能像下面一样一个个引用赋值:
str[0] = 'c'; //正确
str[1] = 'h';
.... //下面的自己完成
或者用初始化的形式:
char str[ ] = "china"; //正确,声明的同时初始化了数组,数组长度根据元素个数确定
数组说那么多。
那指针呢?好,我给你说两点。
第一:在上一步当中,我们把字符串保存到了数组当中,那只要用一个指针指向这个数组就OK了。那我们可以让这个指针指向数组的首地址也就是字符'c'(希望你对指针已经有了一定的基础),以后偏移一个单位的存储单元就可以指向下一个元素。可以向下面一样:
char str[ ] = "china";
char *p; //声明一个指向char型的指针变量
p = &str[0]; //指向数组的首地址,即取第0个元素的地址给p
当然,C语言当中数组名表示该数组的首地址,所以上面的这句可以写成:
p = str;
第二:一个字符串赋给一个指针变量,其实是将该字符串的首地址给了这个指针。所以,我们可以直接这样写而不用借助于数组:
char *p; //声明char型的指针变量
p = "china"; //字符串传递给指针的的是该字符串的首地址,即字符'c'的地址
这样,以后每偏移一个地址就指向下一个字符。比如我要指向'h',就p++;
这么说,懂吧?