首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c和指针的一个有关问题

2012-09-14 
c和指针的一个问题在第8章数组中,书中声明了一个char型数组,形式如下:char const keyword[]{do,for,

c和指针的一个问题
在第8章数组中,书中声明了一个char型数组,形式如下:
char const keyword[]={"do","for","if","register","return","switch","while"};
#define N_KEYWORD (sizeof(keyword)/sizeof(keyword[0]))
书上的这种初始化表示方法应该错了吧。
书上说sizeof(keyword)的结果是整个数组所占用的字节数,但是keyword只是一个指针常量,那sizeof(keyword)得出的值应该只是指针的长度吧,这个有点晕了,求指点

[解决办法]
keyword是一个数组名 sizeof(keyword)得出的值是整个数组的长度,也就是整个数组所占用的字节数
[解决办法]
《C和指针》第八章 8.1.1(Page142)数组名中这样讲到这样一个概念:
当数组名字作为sizeof的操作符,sizeof返回整个数组的长度,而不是指向数组的指针的长度。
[解决办法]
#include<stdio.h>
#define N_KEYWORD (sizeof(keyword)/sizeof(keyword[0]))
main()
{
char const keyword[][12]={"do","for","if","register","return","switch","while"};
printf("%d\n",N_KEYWORD);
}
[解决办法]
char const *keyword[] = {"do","for","if","register","return","switch","while"};
这样写才能编译通过。
指针数组,每个元素都是指针,每个指针4个字节(VC 6 xp),一共7*4 = 28个字节,所以最后N_KEYWORD就是7,和普通数组是一样的。
我想你可能是和一下的这个想有个区分吧:

char p[] = "Hello World !";
Len = sizeof(p)/sizeof(p[0]);

这个的p同样是数组名,数组定义初始化的省略形式。

const char* p = "Hello World !";
这时候p的大小才是4
[解决办法]
数组名和指针不完全一样,只是在传值的时候数组名会退化为指针。
建议楼主看一下《C和指针》
[解决办法]
1)LZ贴出的代码可能有错。可能是:char const *keyword[]={"do","for","if","register","return","switch","while"};
2)字符串数组一般以二维数组char p[][],或数组指针char *p[]表示。

热点排行