没有意思吧 ,给出的信息太少
unsigned char *tempstr;
tempstr[1];
这两句代码是花码, 根本不会产生任何指令,即不生成任何可执行的机器码。
如果说你把指针当成数组。
unsigned char *tempstr;
tempstr[1];
printf("%c", tempstr[1]) //这个执行要看具体的编译器。
如果说你是vc使用的debug版,因为栈空间被初始化为0xcc,所以你输出的是地址 0xccccccc处的内容,显然这是一次内存访问违例, 所以程序会死掉
如果编译器将栈空间初始化0,那还是访问违例!
我是菜鸟,希望能帮到你,观楼主英俊潇洒,风流倜傥,必当世豪杰,诚邀加入0x30百度贴吧,共商义举,建不世之功!
这是一个特性
C/C++有很多这样的定义
typedef struct {
unsigned long size;//指示大小
//...
long value[];//有些是value[0] 编译器支持其中一种或全部,就算是C/C++中的挂羊头卖狗肉
}same_name;
这类的对象是在自己获取的内存块中定义的,是另类的可变长数组。
在参数传递中,数组对象会传地址,也就是指针,所以必须支持 指针可以和数组一样带下标来实现解引用。
这样的代码运行没有任何意义,tempstr指针声明只是在内存中指定了一个能存储unsigned char类型变量的位置,但没有开辟内存空间,因此tempstr[1]的结果是不可预料的。
正确的写法应该是
int main(){
unsigned char *tempstr = new unsigned char[10]; //动态开辟内存并将起始指针赋给tempstr
tempstr[1] = 'a';
//...
delete [] tempstr; //释放内存很重要,是一个有经验程序员的标志
return 0;
}
tempstr仅仅是一个字符数组的首字符地址,tempstr[1],就表示第二个字符
你定义的是指针,指针是可以作为数组使用的。