C数组初始化问题

神童i 2017-11-18 03:35:26
C语言数组如果没有初始化,对数组中元素都没有赋值,输出的是垃圾数值;
如果对数组任意元素赋值,那么数组的其它元素就会被赋值为 0
对不对?
...全文
274 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2017-11-22
  • 打赏
  • 举报
回复
不说别的,就这个缩进本身就有问题:
while (num) {
	tmp = num%10;
	// 这不是 python。if 之后没有花括号,作用范围只有一行“num += 1;”。
	if (tmp % 2 != 0)
		num += 1;
		result = (num % 10) * pow(10,i) + result;
	i++;
	num /= 10;
}
棉猴 2017-11-22
  • 打赏
  • 举报
回复
全局变量默认初始值是0,局部变量没有初始值,给数组某个元素赋值,其它元素并没有被赋值。
leiyuexian5474 2017-11-22
  • 打赏
  • 举报
回复
不对,其他值仍然是垃圾值。
pubuzhixia 2017-11-22
  • 打赏
  • 举报
回复
不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
赵4老师 2017-11-21
  • 打赏
  • 举报
回复
不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
两水先木示 2017-11-21
  • 打赏
  • 举报
回复
测试一下,我记得是定义的时候赋值例如:int a[10]={0};那么a的全部都为0,如果是int a[10]; a[0]=0;那么只赋值了a[0] 其他都未知值(随机整数) 一些数组初始化也可用memset(a,0,sizeof(a));去给数组全赋值0,或者full(a,0)
Larry_666 2017-11-21
  • 打赏
  • 举报
回复
做编程,还是要多动手,敲敲代码,这样印象深刻
药丸啊 2017-11-18
  • 打赏
  • 举报
回复
不对,对任意元素赋值,并不会改变其余元素的值
自信男孩 2017-11-18
  • 打赏
  • 举报
回复
引用 8 楼 qq_37347705 的回复:
咦,不对吧。


:!./a.out
0
0
0
0
4195712
10
4195392
0
1948630112
32767


楼上的代码,这是结果。
所以,若定义时不对数组初始化,然后对任意元素赋值,不会导致其他元素都位0;
小熊之怒 2017-11-18
  • 打赏
  • 举报
回复
咦,不对吧。


:!./a.out
0
0
0
0
4195712
10
4195392
0
1948630112
32767


楼上的代码,这是结果。
自信男孩 2017-11-18
  • 打赏
  • 举报
回复
引用 6 楼 darker0019527 的回复:
[quote=引用 4 楼 cfjtaishan 的回复:] 建议楼主试一下,结果是否定的。对某个下表对应的数组元素赋值,只能改变对应的元素值,而不能对其他元素有影响;
int a[5] = {0}; 这句话是对a[0]赋值还是对数组 [/quote] 这个是对数组初始化;即所有元素都初始化位0;
如果对数组任意元素赋值,那么数组的其它元素就会被赋值为 0
这句话,怎么理解呢? 我的理解是这样的,比如:
#include <stdio.h>
 
int main(void)
{
    int arr[10];
 
    arr[5] = 10;
 
    for (int i = 0; i < 10; i++)
        printf("%d\n", arr[i]);
    return 0;
}
神童i 2017-11-18
  • 打赏
  • 举报
回复
引用 4 楼 cfjtaishan 的回复:
建议楼主试一下,结果是否定的。对某个下表对应的数组元素赋值,只能改变对应的元素值,而不能对其他元素有影响;
int a[5] = {0}; 这句话是对a[0]赋值还是对数组
神童i 2017-11-18
  • 打赏
  • 举报
回复
int a[5] = {0}; 这句话是对a[0]赋值还是对数组
自信男孩 2017-11-18
  • 打赏
  • 举报
回复
建议楼主试一下,结果是否定的。对某个下表对应的数组元素赋值,只能改变对应的元素值,而不能对其他元素有影响;
自信男孩 2017-11-18
  • 打赏
  • 举报
回复
引用 1 楼 c464580613 的回复:
对 你尝试一下不就可以了吗= =
引用 2 楼 cfjtaishan 的回复:
[quote=引用 1 楼 c464580613 的回复:] 对 你尝试一下不就可以了吗= =
对吗? 尝试一下对不对;
#include <stdio.h>
#include <math.h>

int change_to_pmh_number(int num)
{
    int i = 0;
    int tmp, result = 0;

    while (num) {
        tmp = num%10;
        if(tmp % 2 != 0)
            num += 1;
            result = (num % 10) * pow(10,i) + result;
        i++;
        num /= 10;
    }

    return result;
}

int main( void )
{
    int num;

    while (scanf("%d", &num) != EOF)
        printf("%d\n", change_to_pmh_number(num));

    return 0;
}
[/quote] 发错了
#include <stdio.h>

int main(void)
{
    int arr[10];

    arr[5] = 10;

    for (int i = 0; i < 10; i++)
        printf("%d\n", arr[i]);
    return 0;
}
自信男孩 2017-11-18
  • 打赏
  • 举报
回复
引用 1 楼 c464580613 的回复:
对 你尝试一下不就可以了吗= =
对吗? 尝试一下对不对;
#include <stdio.h>
#include <math.h>

int change_to_pmh_number(int num)
{
    int i = 0;
    int tmp, result = 0;

    while (num) {
        tmp = num%10;
        if(tmp % 2 != 0)
            num += 1;
            result = (num % 10) * pow(10,i) + result;
        i++;
        num /= 10;
    }

    return result;
}

int main( void )
{
    int num;

    while (scanf("%d", &num) != EOF)
        printf("%d\n", change_to_pmh_number(num));

    return 0;
}
c464580613 2017-11-18
  • 打赏
  • 举报
回复
对 你尝试一下不就可以了吗= =

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧