Summer 8

本文深入探讨C语言的高级应用,包括typedef简化数组定义、const修饰符的微妙区别、字符串长度计算、switch语句行为、指针与数组的内存解析及变量地址操作,通过实例解析C语言的复杂特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值