鱼C论坛

 找回密码
 立即注册
查看: 4140|回复: 15

关于全局变量使用的问题

[复制链接]
发表于 2022-4-16 15:41:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <windows.h>
#include <time.h>
char ui_b[22][12];
void ui_block(); //主要界面 
 
int main()
{
        return 0;
}
void ui_block()//主要界面 
{
         ui_b[22][12]={
        {1,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,0,0,0,0,0,0,0,0,0,1},
        {1,0,0,0,0,0,0,0,0,0,0,1}
        }; 
}
工具 :dev c++
编译后 :[Error] expected expression before '{' token
改成                  extern char ui_b[22][12]={........} ;
编译后:        [Error] 'ui_b' has both 'extern' and initializer
不知道怎么结局全局变量使用问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-16 15:55:57 | 显示全部楼层
像main()里面那样给数组整体一次性赋值,只有在初始化的时候才可以
你要么就在上面定义全局变量的同时直接初始化赋值,要么就在main()里面用循环依次给数组元素赋值
另外,往字符数组里存数字。。没看懂,不知道你想干嘛,如果是想存字符1/0,那就加上单引号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-16 15:57:29 From FishC Mobile | 显示全部楼层
#include <stdio.h>
#include <time.h>

char ui_b[22][12]={
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1}
};

void ui_block(); //主要界面

int main()
{
    return 0;
}

void ui_block()
{
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-16 15:58:36 From FishC Mobile | 显示全部楼层
这么赋值只能在数组变量初始化的时候用,不能在函数里这么赋值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-16 19:52:43 | 显示全部楼层
zzxhh628 发表于 2022-4-16 15:58
这么赋值只能在数组变量初始化的时候用,不能在函数里这么赋值。

是所有的全局变量都要在初始化时赋值吗?不可以在函数体里面赋值吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-16 21:24:19 | 显示全部楼层
你这个问题太简单了你这是想给整个数组初始化吧

既然你想给整个数组初始化你为什么要写 [xx][xx]这样带上索引啊

而且c语言不允许数组改变地址的你不能这么赋值,我的意思就是说数组初始化才可以这么写
int a[2] = {1, 2};

如果你这么写
int a[2];
a = {1, 2};
这是错的,{1, 2}属于一个代码区的常量,你这操作就是要把数组的指针改了,c语言不允许这样。

你要是想赋值请用循环,写代码怎么能向你一样如此“老实”呢
int tempArr[] = {1,0,0,0,0,0,0,0,0,0,0,1};
for (int i; i < sizeof(ui_b)/sizeof(ui_b[0])); i++) {
    for (int ii; ii < sizeof(ui_b[0])/sizeof(ui_b[0][0])); ii++) {
    ui_b[i][ii] = tempArr[ii];
}
}
这里写代码不方便,也懒得检验了,这段代码很简单,很粗暴,很无脑,我想你应该看得懂(注意不要传入数组,传入数组的话因为地址一样,会导致问题)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-16 21:32:34 From FishC Mobile | 显示全部楼层
本帖最后由 zzxhh628 于 2022-4-16 21:36 编辑
想入门的新人 发表于 2022-4-16 19:52
是所有的全局变量都要在初始化时赋值吗?不可以在函数体里面赋值吗?


不是,一般全局变量没事,关键你这是个二维数组,即使是局部的二维数组也得这样初始化。全局变量和局部变量的声明、初始化没什么差异,差不多都一样,只是作用域不同。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-16 22:18:37 | 显示全部楼层
AnisHan 发表于 2022-4-16 21:24
你这个问题太简单了你这是想给整个数组初始化吧

既然你想给整个数组初始化你为什么要写 [xx][xx]这样带 ...

感谢回复,我大概懂你的意思了,但是,我下一次还要在这个数组上修改一点点,假如用循环的话感觉有点麻烦了,我要修改7次,如果每次都要定义一个临时变量来赋值感觉多余,如果各定义一个全局变量感觉又有点费空间,而且我要单独为他们每一个写一个循环打印出来(因为数组名不一样);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-16 22:26:08 | 显示全部楼层
zzxhh628 发表于 2022-4-16 21:32
不是,一般全局变量没事,关键你这是个二维数组,即使是局部的二维数组也得这样初始化。全局变量和局部 ...
char block_r[2][4]={
                {1,1,1,1},
                {1,0,0,0}};
感谢回复。像这样的等会我只改变一点点(改变好几次) ,如果各定义一个的话感觉浪费空间,冗余度好大。就是有没有什么方法不需要太多空间,完成这样的操作。-------这里的也需要是全局变量,因为需要在其它函数中使用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-17 21:02:53 | 显示全部楼层
想入门的新人 发表于 2022-4-16 22:18
感谢回复,我大概懂你的意思了,但是,我下一次还要在这个数组上修改一点点,假如用循环的话感觉有点麻烦 ...

每次如果不一样你可以把临时变量作为函数参数,要不然你只能xxx[xxx] = xxx;这样赋值更麻烦,而且这样代码后期维护性超级低,如果你每个元素都不一样(且没有规律)那就没办法了,你给函数设置个参数然后copy数组吧,要不然你可以找规律比如初始化一盒扑克牌,这完全有规律没问题的。
其他语言即使允许你这么写大多数要么数组变量本质上是对象指针如Java,要么就是copy数组
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-20 20:24:25 | 显示全部楼层
为什么要在函数里面去初始化数组?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-21 08:04:09 From FishC Mobile | 显示全部楼层
贾政景 发表于 2022-4-20 20:24
为什么要在函数里面去初始化数组?

因为等会就要在这里使用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-21 15:33:46 | 显示全部楼层
想入门的新人 发表于 2022-4-21 08:04
因为等会就要在这里使用

你这样写个ui_b[22][12]={......},在电脑看来就是u给i_b数组的第[22][12]个元素赋值,肯定报错啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-21 15:34:42 | 显示全部楼层
贾政景 发表于 2022-4-21 15:33
你这样写个ui_b[22][12]={......},在电脑看来就是u给i_b数组的第[22][12]个元素赋值,肯定报错啊

试试用引用或者指针传递
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-22 12:04:11 | 显示全部楼层
贾政景 发表于 2022-4-21 15:33
你这样写个ui_b[22][12]={......},在电脑看来就是u给i_b数组的第[22][12]个元素赋值,肯定报错啊

C语言也不支持数组二次初始化毕竟不像Java都是值传递传的都是指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-23 17:05:42 | 显示全部楼层
AnisHan 发表于 2022-4-22 12:04
C语言也不支持数组二次初始化毕竟不像Java都是值传递传的都是指针

对,已经初始化过了,所以后面的赋值就要一个元素一个元素地赋值了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 21:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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