| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1381 人关注过本帖
标题:一个循环赋值的问题
取消只看楼主 加入收藏
JSTN
Rank: 1
等 级:新手上路
帖 子:4
专家分:5
注 册:2017-8-16
收藏
 问题点数:0 回复次数:1 
一个循环赋值的问题
我用的是Visual Studio 2017。

正常情况下代码如下
程序代码:
#include<stdio.h>
#include<conio.h>
int main()
{
    char f1_name[4096], f2_name[4096];
    unsigned long long *ip1, *ip2, *ipe1 = (unsigned long long*)(f1_name + 4096);

    ip1 = (unsigned long long*)f1_name;
    ip2 = (unsigned long long*)f2_name;
    for (; ip1 < ipe1; ip1++, ip2++)
        *ip1 = *ip2 = 0;
    ip1 = (unsigned long long*)f1_name;
    ip2 = (unsigned long long*)f2_name;
    for (; ip1 < ipe1; ip1++, ip2++)
        printf("%llX %llX\n", *ip1, *ip2);
    return 0;
}
输出是两列0。

在赋值前加入输出代码后代码如下
程序代码:
#include<stdio.h>
#include<conio.h>
int main()
{
    char f1_name[4096], f2_name[4096];
    unsigned long long *ip1, *ip2, *ipe1 = (unsigned long long*)(f1_name + 4096);

    ip1 = (unsigned long long*)f1_name;
    ip2 = (unsigned long long*)f2_name;
    for (; ip1 < ipe1; ip1++, ip2++)
    {
        printf("%llX %llX\n", *ip1, *ip2);
    };
    getchar();

    ip1 = (unsigned long long*)f1_name;
    ip2 = (unsigned long long*)f2_name;
    for (; ip1 < ipe1; ip1++, ip2++)
        *ip1 = *ip2 = 0;
    ip1 = (unsigned long long*)f1_name;
    ip2 = (unsigned long long*)f2_name;
    for (; ip1 < ipe1; ip1++, ip2++)
    {
        printf("%llX %llX\n", *ip1, *ip2);
    }
    return 0;
}

为什么在加入代码后输出的第二列不是0,而是一列相同的数字(每次运行不一定一样),例如63006200610060、67006600650064、6B006A00690068?
搜索更多相关主题的帖子: 赋值 include unsigned long for 
2017-08-16 15:10
JSTN
Rank: 1
等 级:新手上路
帖 子:4
专家分:5
注 册:2017-8-16
收藏
得分:0 
回复 2楼 ldsh304
我说的是第二个printf语句输出的第二列不是0。为什么不是0我现在还不清楚,不过生成64位程序输出的都是0,生成32位的第二列就不是0。
2017-08-17 11:53
快速回复:一个循环赋值的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022070 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved