C语言指针问题2
#include "stdio.h"main()
{ const char a[10]={1,2,3};
int *p;
p=a ;
printf("%d",*p);
getch();
}输出的结果是513
为什么不是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
}
程序代码:#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);
}
