Chinaunix

标题: char s[] 和char *s问题 [打印本页]

作者: justlooks    时间: 2013-04-03 10:31
标题: char s[] 和char *s问题
书上说char s[]和char *s是一样的,我试了下在函数定义中可以这样
func(char s[])和func(char *s)是一样的,但是在代码中定义编译的话就有问题

写成
int arr[2] = {1,2};
int s[];
s=arr;

gcc会报错
test_point.c: In function 'main':
test_point.c:14:6: error: array size missing in 'q'
test_point.c:15:3: error: incompatible types when assigning to type 'int[1]' from type 'int *'
这个是为什么?
作者: lin5161678    时间: 2013-04-03 11:38
需要提供 数组大小的信息
可以是在定义的时候 写在 [] 里面
可以是是在初始化的时候 根据元素个数 确定
可以是提供一个完整定义.....
作者: wlmouse    时间: 2013-04-03 11:46
建议你看看《征服C指针》这本,我最近在看,挺不错的。应该可以解答你的答案。
作者: cliffordl    时间: 2013-04-03 12:07
回复 1# justlooks


    虽然是一样,但是还是有区别的,C与指针可以看看
作者: linux_c_py_php    时间: 2013-04-03 12:43
数组和指针是两个类型.
作者: wlmouse    时间: 2013-04-03 12:49
回复 5# linux_c_py_php


    问题是有时候是一回事有时候又不是一回事,所以不明白的很容易糊涂。
作者: caohuoxiasoft    时间: 2013-04-03 14:23
数组初始化的时候要指定大小,因为它是静态开辟空间;数组名是常量,不能将常量赋值给常量。数组跟指针还是有很大区别的。
作者: pmerofc    时间: 2013-04-03 17:04
提示: 作者被禁止或删除 内容自动屏蔽
作者: 蜗niu漫步    时间: 2013-04-03 17:48
s=arr;
s是常量,不能这样赋值。。。
作者: wlmouse    时间: 2013-04-03 18:51
回复 9# 蜗niu漫步


    s不是常量,而是错误的数组写法。
作者: 蜗niu漫步    时间: 2013-04-04 16:16
回复 10# wlmouse
数组名是常量啊。。。。

   
作者: 蜗niu漫步    时间: 2013-04-04 16:23
char s[];
不能这样声明。。。。
但是char s[]="abc";
s就是常量。。。。
作者: pmerofc    时间: 2013-04-04 18:18
提示: 作者被禁止或删除 内容自动屏蔽
作者: lion7beckham    时间: 2013-04-04 22:54
1.数组定义时若不指定大小,就必须初始化。
2.数组名代表数组的地址,这个是编译时就分配好的,所以不能再更改。
作者: 蜗niu漫步    时间: 2013-04-05 18:28
pmerofc 发表于 2013-04-04 18:18
这种说法并不准确
在C语言中一共有四种常量
constant:

类似声明char s[]="abc";后,s就无法更改,比如对s重新赋值,s="cde";这个编译也没法过。。我说的是这个意思。。。我说的常量是指s无法更改的意思,不是你说的整形常量,浮点常量。。。。。
作者: pmerofc    时间: 2013-04-05 22:37
提示: 作者被禁止或删除 内容自动屏蔽
作者: gtkmm    时间: 2013-04-06 01:45
如果你有gcc, 自己用typeof判断就是了

const char* a = "hello";

if (typeof(a) == typeof("hello"))
{
   //...不会走到这里的
}

作者: zooyo    时间: 2013-04-06 09:00
提示: 作者被禁止或删除 内容自动屏蔽
作者: pmerofc    时间: 2013-04-06 11:42
提示: 作者被禁止或删除 内容自动屏蔽
作者: zooyo    时间: 2013-04-06 12:55
提示: 作者被禁止或删除 内容自动屏蔽
作者: pmerofc    时间: 2013-04-06 13:29
提示: 作者被禁止或删除 内容自动屏蔽
作者: core1011    时间: 2013-04-07 10:00
=号左边 只能是代表变量的。
作者: tansijie    时间: 2013-04-07 11:08
int s[] ; 定义了一个数组,转换为指针的形势为  int* const s; 也就是说 s是个常量指针,指针的值可以改变,但是指针本身不能随便指,因此你 s=arr的时候会报错。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2