一道指针的基础概念题

来源:百度知道 编辑:UC知道 时间:2024/07/02 23:53:08
char s[ ]="china";char *p;p=s;
那么有这样一个命题:
数组s中的内容和指针变量p中的内容相等。

这个命题是错的,那为什么错呢???

用字符数组和字符指针变量都可实现字符串的存储和运算。 但两者是有区别的。在使用时应注意以下几个问题:

1. 字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。

2. 对字符数组作初始化赋值,必须采用外部类型或静态类型,如: static char st[]={“C Language”};而对字符串指针变量则无此限制,如: char *ps="C Language";

3. 对字符串指针方式 char *ps="C Language";可以写为: char *ps;
ps="C Language"; 而对数组方式: static char st[]={"C Language"};不能写为: char st[20]; st={"C Language"};而只能对字符数组的各元素逐个赋值。

从以上几点可以看出字符串指针变量与字符数组在使用时的区别,同时也可看出使用指针变量更加方便。

前面说过,当一个指针变量在未取得确定地址前使用是危险的,容易引起错误。但是对指针变量直接赋值是可以的。因为C系统对指针变量赋值时要给以确定的地址。因此, char *ps="C Langage";或者 char *ps; ps="C Language";都是合法的。

数组s里的内容是实际的字符串,既"china"
而指针p的内容则是数组s的地址
唉,这真是不好说清楚,建议拿本c和指针好好看看吧

执行 p = s;意思是把p指向s的首地址;
s中的内容是“china”,而p只是一个指针,若取p指向的内容,
可用*p 。但*p只是s中的一个字符。比如这个题目,p指向的位置是
’c', 如果输出*p的话, 是‘c’;
但可以用指