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); }