| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 905 人关注过本帖
标题:C语言指针问题2
只看楼主 加入收藏
NT06
Rank: 1
等 级:新手上路
帖 子:27
专家分:2
注 册:2011-3-24
结帖率:40%
收藏
已结贴  问题点数:10 回复次数:16 
C语言指针问题2
#include "stdio.h"

main()
{ const char a[10]={1,2,3};
  int *p;
  p=a ;
  printf("%d",*p);
  getch();

  }输出的结果是513
为什么不是1
怎么样改采能使得其正确(不能更改变量的类型和指针的类型)
搜索更多相关主题的帖子: C语言 
2011-08-18 09:04
jcw08120110
Rank: 8Rank: 8
来 自:南京
等 级:蝙蝠侠
帖 子:272
专家分:742
注 册:2009-6-8
收藏
得分:1 
程序代码:
#include "stdio.h"

void main()
{  int a[10]={1,2,3};  // a数组 不能是字符类型的~ 改成整形~
  int *p;
  p=a ;
  printf("%d",*p);

  }


程序代码:
#include "stdio.h"
void main()
{ char a[10]={1,2,3};  
  char *p;    // 指针改成 char类型 
  p=a ;
  printf("%d",*p); // 这里 %d 不能 %c

  }


[ 本帖最后由 jcw08120110 于 2011-8-18 11:20 编辑 ]

君生我未生 我生君以老
2011-08-18 09:11
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:1 
printf("%d", *(char *)p);

My life is brilliant
2011-08-18 11:35
yuaniao
Rank: 2
等 级:论坛游民
帖 子:19
专家分:44
注 册:2011-7-13
收藏
得分:1 
#include "stdio.h"
#include<conio.h>

main()
{ int a[10]={1,2,3};
  int *p;
  p=a ;
  printf("%d",*p);
  getch();

}
2011-08-18 14:24
yuaniao
Rank: 2
等 级:论坛游民
帖 子:19
专家分:44
注 册:2011-7-13
收藏
得分:0 
#include "stdio.h"
#include<conio.h>
main()
{ const char a[10]={1,2,3,4,5,6,7,8,9,0};
  const char *p;
  p=a ;
  printf("%d",*p);
  getch();

  }
2011-08-18 14:27
NT06
Rank: 1
等 级:新手上路
帖 子:27
专家分:2
注 册:2011-3-24
收藏
得分:0 
回复 3楼 lz1091914999
第一项是对了 第二现就不对了  请不要改变最好的输出这行是固定的 只能改变p=a 这一项可随意添加  但最后我要的还这个意思 麻烦你在帮我想想吧
2011-08-18 14:33
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 6楼 NT06
const char a[10] = {1,2,3};
int * p, temp;
temp = *a;
p = &temp;

My life is brilliant
2011-08-18 14:51
jcw08120110
Rank: 8Rank: 8
来 自:南京
等 级:蝙蝠侠
帖 子:272
专家分:742
注 册:2009-6-8
收藏
得分:0 
楼主的问题是 怎么样改采能使得其正确(不能更改变量的类型和指针的类型) 就是不能改变指针和数组类型~

C语言是强类型的语言 你想把 const char *[] 转换成 int *; 我觉得有难度的啊;那么你这个问题的实质就是类型转换;
c语言我不太精通   不过我想用c++里面的强制类型转换以及清除const的转换方法;
第一次尝试
程序代码:
#include<iostream>
using namespace std;
void main()
{  
    const char a[]={1,2,3,4,5,6,7,8,9,0};
    int *p;
    p=reinterpret_cast<int *>(const_cast<char *>(a));
    cout<<*p<<endl;
}
图片附件: 游客没有浏览图片的权限,请 登录注册
这个看起来确实消去了const 可是结果却是这么奇怪的数!那么肯定是在转换char* -> int * 时出问题了!那么我将a[1]改为2 结果加1;证明确实是数组空间中的数;可是结果为什么这么大呢?这是因为char和int的字节是不同的,所以在char是一个数组元素,可是输出int类型却输出多个元素空间值;所以看起来就很大了;所以根源就是他传的是指针那么我们再定义一个字符不让他传指针;那么这个题目就没有有意义了;程序在下面 投机取巧的 你别骂我;
程序代码:
#include<stdio.h>
void main()
{  
    const char a[]={2,2,3,4,5,6,7,8,9,0};
    int *p;
    char b=a[0]; //使用2个中间变量 const char->char ; char -> int;
    int  b1=b;
    p=&b1;  //这里就是 使用int指针能指向int数据;
    printf("%d",*p);
}

看似简单的问题已经触摸到很深的规则;我都陷进去了~

[ 本帖最后由 jcw08120110 于 2011-8-18 15:09 编辑 ]

君生我未生 我生君以老
2011-08-18 15:03
死蜜蜂
Rank: 2
等 级:论坛游民
帖 子:16
专家分:15
注 册:2011-8-16
收藏
得分:1 
图片附件: 游客没有浏览图片的权限,请 登录注册
这样结果就是
图片附件: 游客没有浏览图片的权限,请 登录注册
2011-08-18 15:03
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:1 
这样就可以了
程序代码:
#include <stdio.h>
#include <conio.h>

void main(void)
{
    const char a[10] = {1, 2, 3};
    int* p;

 
    p = (int*)a;
    printf_s("%d", (char)*p);
    _getwch();
}


[ 本帖最后由 TonyDeng 于 2011-8-18 15:21 编辑 ]

授人以渔,不授人以鱼。
2011-08-18 15:20
快速回复:C语言指针问题2
数据加载中...
 
   



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

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