LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 816|回复: 8

数组和指针已经把我搞晕倒了!!!!

[复制链接]
发表于 2004-5-23 16:19:26 | 显示全部楼层 |阅读模式
我在程序里定义了一个字符数组
char array[]="我要学好c语言";
然后定义一个函数,用字符数组作形参
int function(char array[])
{
    int arraysize=sizeof (array);
    printf ("array size if %d",arraysize);
}
结果arraysize是4。而且无论我前面把array[]定义成什么,这个arraysize都是4。也就是说这里的传递到函数里的array变成了一个指针。
请问我要如何做才能正确的得到array的长度。。
谢谢!!!!
发表于 2004-5-23 18:15:18 | 显示全部楼层

哈哈

不可能得到,除非这个长度显式的传入函数
发表于 2004-5-23 18:22:57 | 显示全部楼层
strlen(array)
发表于 2004-5-23 19:01:53 | 显示全部楼层
发表于 2004-5-23 19:36:00 | 显示全部楼层
数组名在作为函数参数传递是会退化为指针,应该把数组的长度作为参数一起传递。
发表于 2004-5-23 22:48:36 | 显示全部楼层
因为字符串是局部;
被调用函数是看不见字符串的,只能用指针进行操作。
但可以变通一下,比较麻烦就是。

不知道这样说对不对?:p
发表于 2004-5-24 02:27:40 | 显示全部楼层
呵呵,帮我复习了一下 函数调用和返回:

这个应该可以

  1. [linuxer@mydesktop bmp]$ cat test1.c
  2. /*在被调用函数中计算字串长度
  3. *     Copyright seablue at linuxsir.cn
  4. *          Version 0.1.0
  5. *           2004-05-24
  6. */

  7. #include <stdio.h>
  8. main()
  9. { char array[]="我要学好C语言";
  10.   printf("array_len = %d\n",function(array));
  11. }
  12. int function(ptr)
  13. {
  14. int a=1;
  15. char *ptr1=(char *)ptr;
  16. while ( *ptr1++ )a++;
  17. return a;
  18. }
  19. [linuxer@mydesktop bmp]$ gcc -o test1.o test1.c
  20. [linuxer@mydesktop bmp]$ ./test1.o
  21. array_len = 14
复制代码
发表于 2004-5-24 19:55:09 | 显示全部楼层
最初由 seablue 发表
因为字符串是局部;
被调用函数是看不见字符串的,只能用指针进行操作。
但可以变通一下,比较麻烦就是。

不知道这样说对不对?:p

说得不够严格. 应该是C语言的参数传递机制只有传值一种方式, 无法传递整个字符串.
所以在一个函数中声明的字符串只能以指针形式传递到另一个函数中.
发表于 2004-5-24 22:08:25 | 显示全部楼层
//对不起啊,我功力浅,用vc给你作罢(我暂时学windows编程)
//这是一个另类解决方法.............................
//注意fuc2()函数....................................
// 123.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream.h"
fuc(char array[])
{
cout << array << '\n';
cout << sizeof array <<'\n' ;

}
fuc2(char *array,int i)
{
cout << i <<'\n';

}
int main(int argc, char* argv[])
{
char array[]="我要学好c语言";
cout << array << '\n';
cout << sizeof array<<'\n' ;
fuc(array);
fuc2(array,sizeof array);
return 0;

}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表