重庆广场宾馆:关于C++的一些小问题

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/28 06:35:33
第一
char x[]="abcdef";
char y[]={'a','b','c','d','e','f'}
有什么区别吗?

第二
int main()
{
int x[4]={1,2,3,4},**s
k=x;
s=&k;

这里**s什么意思? 还有s=&k是什么意思?
}

只解答第一个

char x[]="abcdef";
"abcdef"是常量,表示在程序编译之后,"abcdef"将存放在静态存储区,相当于是const的。x只是这个静态字符串的首地址。你不能通过x来改变这个字符串中的任何一个字符。字符串结束处有默认的'\0'。

char y[]={'a','b','c','d','e','f'}
y记录了一个字符数组的起始地址。它不存在'\0'的结束标志。这个数组将存储在栈中,或者全局存储区中,主要看你是在什么地方定义的了。 你可以通过y来修改其中的任意一个字符。

总结一个,主要有三点:
(1)要分清楚程序变量的几个存储区:静态存储区,全局变量存储区,栈,堆等。
(2)各个存储区内的变量是否具有可修改性
(3)字符串和字符数组之间的关系。

x[] 是一个字符数组,但能表示一个字符串,x[6]是'\0',
y[] 只是一个字符数组, y[6]不是数组的元素,
也就是说,x[] 有7个元素, y[]只有6个.

**s代表指针的指针. s = &k表示s指向k的地址.
&是取地址符.

第一
char x[]="abcdef"; 是一个字符串,存储时后面自动加了个终止符\0,要七个字节
char y[]={'a','b','c','d','e','f'}
是个字符数组,只占六个字节

第二
int main()
{
int x[4]={1,2,3,4},**s
k=x;
s=&k;
这个有点问题吧,k没有声明,如果k声明为一个指针,则k=x;是将x[0]的地址赋给k,如k不是一个指针,只是一个整形数组的话,这条语法有错误,数组不能这样直接赋值,
s=&k则是取地址,取址符&有时也用来表示引用