C语言练习(三)字符串左旋结果

目录

在小端机器中,下面代码输出的结果是:( )

下列程序段的输出结果为()

以下哪个操作可以避免野指针的出现?

下面关于assert宏的描述哪个是正确的?

下面关于"指针"的描述不正确的是()

下面代码的执行结果是( )

字符串左旋结果

在小端机器中,下面代码输出的结果是:( )

C语言练习(三)字符串左旋结果_第1张图片

#include 
int main()
{
    int a = 0x11223344;
    char *pc = (char*)&a;
    *pc = 0;
    printf("%x\n", a);
    return 0;
}

假设,a变量的地址为0x64,则a变量在内存中的模型为:
0x64| 44 |
0x65| 33 |
0x66| 22 |
0x67| 11 |

char*类型的指针变量pc指向只能指向字符类型的空间,如果是非char类型的空间,必须要将该空间的地址强转为char*类型。
char *pc = (char*)&a; pc实际指向的是整形变量a的空间,即pc的内容为0x64,即44,
*pc=0,即将44位置中内容改为0,修改完成之后,a中内容为:0x11223300

因此:选择C

下列程序段的输出结果为()

C语言练习(三)字符串左旋结果_第2张图片

unsigned long pulArray[] = {6,7,8,9,10};
unsigned long *pulPtr;
pulPtr = pulArray;
*(pulPtr + 3) += 3;
printf("%d,%d\n",*pulPtr, *(pulPtr + 3));

unsigned long pulArray[] = {6,7,8,9,10};
unsigned long *pulPtr;
pulPtr = pulArray; // 数组名代表数组首元素地址,因此pulptr指向的是数组中第一个元素的位置
*(pulPtr + 3) += 3; // pulptr+3访问的是数组中第三个元素(数组下标从0开始),故将9改为9+3=12
printf("%d,%d\n",*pulPtr, *(pulPtr + 3)); // 打印第一个和第三个元素,因此:打印6和12

选C

以下哪个操作可以避免野指针的出现?

C语言练习(三)字符串左旋结果_第3张图片

ABCD都对

下面关于assert宏的描述哪个是正确的?

C语言练习(三)字符串左旋结果_第4张图片

答案是B.assert宏仅在调试模式下起作用。
assert宏在程序编译的时候通常是被禁用的,当编译选项中加入"-DNDEBUG"时,assert宏就会被禁用,因此assert宏仅在调试模式下起作用。当assert宏的表达式结果为false时,程序会终止执行。assert宏可以用于任何类型的表达式,不仅仅限于整数类型。

下面关于"指针"的描述不正确的是()

C语言练习(三)字符串左旋结果_第5张图片

A选项目前还没学,目前只需要了解free不会更改指针的指向。

B选项强调了32位系统,所以没问题。

CD选项是定义本身。

所以排除法也可以确定是A。

下面代码的执行结果是( )

C语言练习(三)字符串左旋结果_第6张图片

str1和str2是两个数组,数组的操作方式是将右边常量字符串的内容拷贝进来,所以他们是两个空间,只是内容相同,所以str1 != str2。而str3和str4是两个指针,编译器在处理的时候,会将相同的常量字符串做成同一个地址,所以,str3和str4指向的是同一个常量字符串,所以str3 == str4,故选C。

字符串左旋结果

C语言练习(三)字符串左旋结果_第7张图片

void rotate(char* str,int n,int sz,char* arr)
{
	int i = 0, j = 0; 
	for (i = n; i < sz; i++)
	{
		arr[j] = str[i];
		j++;
	}
	if (n > 0)
	{
		for (i = 0; i < n; i++)
		{
			arr[j] = str[i];
			j++;
		}
	}
	for (i = 0; i < sz; i++)
	{
		printf("%c", arr[i]);
	}
}


int main()
{
	char str[100] = " "; int n = 0, i = 0; char arr[100] = "";;
	printf("请输入一串字符串:");
	while ((str[i] = getchar()) != '\n')
	{
		i++;
	}
	str[i] = 0;
	int sz = i;
	printf("请输入你要左旋的个数");
	scanf("%d", &n);
	rotate(str, n, sz,arr);

	return 0;
}

你可能感兴趣的:(c语言,开发语言)