标题:关于数组和指针好玩的一些小程序~
取消只看楼主
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
结帖率:99.25%
 问题点数:0 回复次数:2 
关于数组和指针好玩的一些小程序~
最近看数组和指针突然有些发现,写出来看看(据说这是写不可维护代码的需要掌握的技能之一)~


这个是数组版的~

程序代码:
#include<stdio.h>
#include<stdlib.h>

void test0( void );
void test1( void );
void test2( void );
void test3( void );
void test4( void );
void test5( void );
void test6( void );
void test7( void );
void test8( void );

int main( void )
{
    test0();
    test1();
    test2();
    
    puts("");
    
    test3();
    test4();
    test5();
    
    puts("");
    
    test6();
    test7();
    test8();
    
    return 0;
}

void test0( void )
{
    char s[8]={"abcde"};

    char* const p=s;
    
    printf("test0: ");
    
    *p=*"wxyz123";
    
    puts(s);
}

void test1( void )
{
    char s[8]={"abcde"};

    short* const p=( short* )s;
    
    printf("test1: ");
    
    *p=*(const short* const )"wxyz123";
    
    puts(s);
}

void test2( void )
{
    char s[8]={"abcde"};

    int* const p=( int* )s;
    
    printf("test2: ");
    
    *p=*(const int* const )"wxyz123";
    
    puts(s);
}

void test3( void )
{
    char s[8]={"abcde"};

    void* const p=s;
    
    printf("test3: ");
    
    *p=*(const char* const )"wxyz123";
    
    puts(s);
}

void test4( void )
{
    char s[8]={"abcde"};

    void* const p=s;
    
    printf("test4: ");
    
    *p=*(const short* const )"wxyz123";
    
    puts(s);
}

void test5( void )
{
    char s[8]={"abcde"};

    void* const p=s;
    
    printf("test5: ");
    
    *p=*(const int* const )"wxyz123";
    
    puts(s);
}

#define TEST( NAME, TYPE )    \
void NAME ()    \
{    \
   char s[8]={"abcde"};    \
   \
    void* const p=s;    \
    \
    printf(    \
        #NAME": "   \
    );    \
    \
    *p^=*( TYPE* )s;    \
    *p^=*(const TYPE* const )"wxyz123";    \
    puts(s);    \
}

TEST(test6,char)
TEST(test7,short)
TEST(test8,int)


[此贴子已经被作者于2018-4-1 19:44编辑过]

搜索更多相关主题的帖子: void puts char const printf 
2018-04-01 17:32
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 2楼 Jonny0201
具体说说看看,为啥我那个编译器就那么无语地过了(难道是最近我没有再用vc么)~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-04-03 18:51
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 4楼 Jonny0201
明白了,空指针里面的内容不能直接赋值,或者先进的编译器已经考虑到用户这样的输入情况,正常来说是不会这样写代码的,何况这个帖子的代码本来就不是正常的,后面不能通过编译的函数去掉,看前3个就可以了

正常来说要把内容拷贝到空指针里面是用memcpy或者memmove的~

[此贴子已经被作者于2018-4-3 20:07编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-04-03 20:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-485714-1-1.html




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

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