int类型指针可以指向char类型数组吗?
这次安徽省C语言二级考试中出现如图的赋值,编译器报错,但是要输出也可以输出。为什么? sizfof是什么运算符来的??是不是写错了, sizeof 吧??int *p 是整形指针,char s[]却是字符数组, p++现在加的是4个字节, char*pp++才是指向一个字节,这样才对
在int *p中第一次输出的是的内容: "A1B2C3D4E5F6G7H8"是正确的,字符型可以转为整形,整形不一定能转为字符型,但是后面都指到字符串外面去了还能对吗?? for(p=s;i<sizfof(s);i++)中的sizfof打错了应该是sizeof才对吧 天天向上 如果我把代码这么写,你是否会清楚一些呢?{:10_248:}
#include<stdio.h>
int main()
{
char s[] = "FishC";
int *p;
p = s;
printf("%d %c\n", sizeof(s), s);
printf("%d %c\n", sizeof(p), p);
return 0;
}
因为 char 类型本身就是一个特殊的整型,所以把它放到更大的坑里,肯定可以正常显示啦~
本帖最后由 10空间 于 2016-1-10 19:56 编辑
甲鱼兄这是我运行你的代码时给的
d:\vc6.0\16_1_2\树.cpp(8) : error C2440: '=' : cannot convert from 'char ' to 'int *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
执行 cl.exe 时出错.
树.exe - 1 error(s), 0 warning(s)
注:编译器是VC6.0,文件名字是乱敲的 小甲鱼 发表于 2016-1-9 16:35
如果我把代码这么写,你是否会清楚一些呢?
E:\python\C\160110\03.c||In function 'main':|
E:\python\C\160110\03.c|8|warning: assignment from incompatible pointer type |
||=== Build finished: 0 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|
nt *p 是整形指针,char s[]却是字符数组, p++现在加的是4个字节, char*pp++才是指向一个字节,这样才对 C系列的括号 好容易出错啊 sizeof s 结果是 17
而
p++ 如果int是4个字节
只能安全的进行4次 ++
(一次p++ 或跨越4个字节)
所以 后面的 17-4 次 ++ 都是数组越界
printf企图读取越界指针的数据
作死
页:
[1]