1. 若有定义 typedef char STRING[255]; STRING s; 则 s 是 字符数组变量
例如,你不用像下面这样重复定义有 81 个字符元素的数组:
char line[81];
char text[81];
只需这样定义,Line类型即代表了具有81个元素的字符数组,使用方法如下:
typedef char Line[81];
Line text,line;
getline(text);
同样,可以像下面这样隐藏指针语法:
typedef char* pstr;
int mystrcmp(const pstr p1, const pstr p3);
char* const p : 定义一个指向字符的指针常数,即const指针,常量指针。用GNU的gcc和g++编译器,是会出现警告的,按照顺序,“const pstr”被解释为“char* const”(一个指向char的指针常量),而事实上,const char*和char* const表达的并非同一意思,const char*的意思是创建一个指向char类型的指针且不能更改指向地址上的值,而char* const则是不能更改指向的地址;
const char* p :定义一个指向字符型常量的指针。
2.给出以下定义:
char acX[]="abcdefg";
char acY[]={'a', 'b', 'c', 'd', 'e', 'f', 'g'};
则 数组acX的长度大于数组acY的长度. acX比acY多一个长度,也就是多一个'\0' ,前面一个是字符串定义,字符串都有结束符‘\0’。所以比后面长1个字节。
3. 如下代码的运行结果是 12
char s[] = "\\123456\123456\t";
printf("%d\n", strlen(s)); //12
这里考查转义字符,注意 \\ 表示字符 \, \123表示字符 {, \t 表示制表符,这些都是一个字符。
例如: char s[ ]="1234567";,执行 printf(”%d,%d\n“,strlen(s),sizeof(s));后输出的结果是 7 8
strlen求的是字符串"1234567"的长度,也就是遇到字符串的结束符'\0',就结束计算,明显字符串里面有7个字符,因此是7。
sizeof是计算数组s的大小,s里面保存的是'1', '2', '3', '4', '5', '6', '7', '\0' 共8个字符,因此s的大小是8。
strlen(s) 是字符串长度,这里有7个字符 ,所以等于7.
而sizeof(s)是这个存储空间的大小,这里s最后会有一个'\0'的结束字符,所以一共有8个字符,而每个字符刚好一个字节,所以这里是8.
4. 如下代码的运行结果是 24
int main()
{
int s = 0, n;
for (n = 0; n < 4; n++)
{
switch (n)
{
default:s += 4;
case 1:s += 1;
case 2:s += 2;
case 3:s += 3;
}
}
printf("%d\n", s); //24
system("pause");
return 0;
}
switch语句在没有遇到break时会一直向下执行, default语句也执行。
5. 如下代码的输出结果是 0
int main()
{
unsigned long ulA = 0x11000000;
printf("%x\n", *(unsigned char *)&ulA);//0
system("pause");
return 0;
}
//int a;变量
//scanf("%d", &a);
//int a ,*p; 指针
//p = &a;
//int a[10]; 数组
//for(int i=0;i<10; i++)
//{
// scanf("%d", a + i); a + i <= = >&a[i]
//}
&是一元运算符,取变量地址。 *作为标识符,定义变量为指针。
6. 有如下代码
int main()
{
char *pcColor = "blue1";
char acColor[] = "blue1";
printf("%d\n", strlen(pcColor));//5
printf("%d\n", strlen(acColor));//5 strlen是求字符串长度的,sizeof是求所占字节数,strlen要求字符串中必须有\0
printf("%d\n", sizeof(pcColor));//4 指针地址长度
printf("%d\n", sizeof(acColor));//6
system("pause");
return 0;
}