白云体育馆附件的宾馆:简单C指针的问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/02 16:42:10
大家好,请各位朋友帮我看一下下面的C程序哪里出错了
#include <stdio.h>
main()
{
char s,*s1;
s='h';
s1=&s;
printf("%s\n",*s1);
}
本来我是想要取得指针s1所指向的值,但为什么无法取出,,执行后看到的是乱码

LZ要注意,你的printf里面隐含了错误,你试图使用字符串来解释字符格式的数据,这样编译器是不会报错的,但是会发生什么呢:
因为你使用了%s,那么程序不会当*S1是一个字符的地址,而是一段字符串的首地址,那么它会一直输出到出现'\0'结束,这就是为什么你输出的是乱码了,因为你不能保证*s1后面的内存里面正好就是一个\0,正确应该这么写(把%s换成%c):
#include <stdio.h>
main()
{
char s,*s1;
s='h';
s1=&s;
printf("%c\n",*s1);
}
人人都说用指针很危险,呵呵,这个就是一个例子~
enjoy it~~

下面有个小例子,希望你能从中得到一些启发。
#include
void main()
{
int a = 10000;
int* p, d;
p = &d;
p = (int*)a;
printf("%d %d", a, *p);
}
我来简单讲解一下:是这样写int *p好还是这样写int* p好?
这两种用法都是可以的,并且每种写法都有拥护者。指针运算符是向右结合的,如果你象2语句那样写,实际上d还是int类型,而不是指针类型,赞成int *p写法的,就是出于这个原因。你说我把int*用括号括起来不就行了,但是编译器会把这样的写法当成是类型转换,而不是类型定义。赞成int* p写法的,原因就是直观,很清晰的表示p是个整型的指针。例如这样的写法int* p = &a;换成int *p = &a;就很让人费解。为了避免象2语句的误解,有个规则就是,一行只定义一个指针。
具体怎样写,要看个人习惯,每种写法人们都是认可的。

你的程序里面的s1,你所希望的是一个指向字符的指针,而不是指向字符串的指针,所以应该printf("%c\n",*s1),c语言中的字符串是以'/0'为结束符的,你给s1的是s的地址,至于s后面内存中存储的是什么就不知道了(其实就是你显示的乱码),你的一句printf("%s\n",*s1),就让s1成了字符串,直到显示到'/0'结束。