找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3135|回复: 15
收起左侧

C语言如何定义一个一定长度的字符串数组,但是数组里面的值都是变量?

[复制链接]
ID:894154 发表于 2021-3-26 15:15 | 显示全部楼层 |阅读模式
如题,请教各位,若我想定义一个一定长度的字符串数组,但是数组里面的值都是变量,请教该如何定义,感激不尽,如下:

unsigned char S[] ="变量1,变量2,变量3,变量4,变量5,"

谢谢!!!
回复

使用道具 举报

ID:390416 发表于 2021-3-26 15:39 | 显示全部楼层
s[];  这样写就行,千万不能有code。code 是常量。
回复

使用道具 举报

ID:139866 发表于 2021-3-26 15:43 | 显示全部楼层
那你为什么不去定义结构体呢
回复

使用道具 举报

ID:883031 发表于 2021-3-26 15:57 | 显示全部楼层
数组里的值是可以变化的,你赋值就会变化,但不能定义为常量型数组
回复

使用道具 举报

ID:592807 发表于 2021-3-26 17:38 | 显示全部楼层
人人学会单片机 发表于 2021-3-26 15:39
s[];  这样写就行,千万不能有code。code 是常量。

定义数组,要么开始就直接赋值,要么直接给位数,你这样会报错的。
char a[2];是对的;
char a[] = "1,2"也是对的;
char a[]j就不行。
另外楼主要的 “数组里面的值都是变量” ,什么是变量,内容可变的int a,b,c中a b c就是变量,如果你确定是变量的话
int a,b,c;
int (*p)[3];
p0 = &a;p1 = &b;p2=&c;


如果你要数组内容可变的的话直接给数组赋值就好了
回复

使用道具 举报

ID:894154 发表于 2021-3-27 11:12 | 显示全部楼层
黄youhui 发表于 2021-3-26 17:38
定义数组,要么开始就直接赋值,要么直接给位数,你这样会报错的。
char a[2];是对的;
char a[] = "1, ...

感谢,好像有点看明白了,再多请教一下,像这样定义,我函数里面使用的时候是可以这样用吗?
for(i=0;i<3;i++)
{
   write_data(P);
}
回复

使用道具 举报

ID:894154 发表于 2021-3-27 11:15 | 显示全部楼层
ANT1987 发表于 2021-3-27 11:12
感谢,好像有点看明白了,再多请教一下,像这样定义,我函数里面使用的时候是可以这样用吗?
for(i=0;i

for(i=0;i<3;i++)
{
   write_data(P);
}
回复

使用道具 举报

ID:592807 发表于 2021-3-27 17:24 | 显示全部楼层
ANT1987 发表于 2021-3-27 11:12
感谢,好像有点看明白了,再多请教一下,像这样定义,我函数里面使用的时候是可以这样用吗?
for(i=0;i

不可以。
int(*p)[3]是指针数组,里面存了3个指针等价于 int a[3][x],就是3个数组a0[x],a1[x],a2[x];
(*p)[0] = a0;(*p)[0] +1= a0[1];a0[1] = a0 +1
(*p)[1] = a1;
(*p)[2] = a2;

但是(*p) = (*p)[0] = a0,而p则是他们的地址p = &a,你传过去的是地址,也是数组,你要的应该是a0里面放的内容,
如果你要这样的话必须在你的()write_data必须是这样的write_data(int *addr)
如果的write_data()的原型是write_data(unsigned char data)的话就必须是write_data((*(*(p+0)+0))。

其中
p用来存放之前定义的(*p)[3]这个指针数组的地址的
p+0是用来表示(*p)[3]这个数组第一参数的地址的,也就是数组(a0的地址)的地址,注意是存放a0地址的地址
*(p+0)用来便是表示(p+0)地址指向的内容,也就是a0的地址,可以理解成&a0,或者&a0[0];

*(p+0)+0就是&a0+0,就是数组a0的第一位参数的地址,其实就是&a0[0]
*(*(p+0)+0)就是用来便是&a00]指向的内容的,也就是a0[0].也可以是a[0][0];

其实你为何要搞的这么麻烦呢,直接定义一个变量unsigned char data然后赋值不行吗?直接定义成全局变量也行。
回复

使用道具 举报

ID:462827 发表于 2021-3-27 19:03 | 显示全部楼层
你现在只定义了一个字符串而不是字符串数组哦,字符串数组要这样:

unsigned char S[][10] ={"变量1","变量2","变量3","变量4","变量5"};
回复

使用道具 举报

ID:68800 发表于 2021-3-27 22:31 | 显示全部楼层
unsigned char S[];
for(i=0;i<3;i++)
{
   write_data(S[i]);
}
回复

使用道具 举报

ID:897480 发表于 2021-3-27 22:42 | 显示全部楼层
赋值就会变化,但不能定义为常量型数组
回复

使用道具 举报

ID:894154 发表于 2021-3-29 12:39 | 显示全部楼层
黄youhui 发表于 2021-3-27 17:24
不可以。
int(*p)[3]是指针数组,里面存了3个指针等价于 int a[3][x],就是3个数组a0[x],a1[x],a2[x];
...

非常感谢,我用了后面的方法,代码是比较冗长一点,但是自己比较能把握.谢谢!!!
回复

使用道具 举报

ID:894154 发表于 2021-3-29 12:41 | 显示全部楼层
人人学会单片机 发表于 2021-3-26 15:39
s[];  这样写就行,千万不能有code。code 是常量。

谢谢!!!
回复

使用道具 举报

ID:894154 发表于 2021-3-29 12:41 | 显示全部楼层
天ノ忆 发表于 2021-3-26 15:43
那你为什么不去定义结构体呢

感谢!
回复

使用道具 举报

ID:894154 发表于 2021-3-29 12:43 | 显示全部楼层
zhousijie33 发表于 2021-3-27 22:42
赋值就会变化,但不能定义为常量型数组

感谢!
回复

使用道具 举报

ID:898035 发表于 2021-3-29 14:50 | 显示全部楼层
先定义这5个变量,再定义为指针数组unsigned char *S[] ="&变量1,&变量2,&变量3,&变量4,&变量5,"
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表