12.以下为64位机器上的C程序,请计算下列sizeof 的值。char str[]= "Hello"; char *p1 = str ;int n = 8; void *p2 = malloc(n); 请计算: sizeof(str);sizeof(p1);sizeof(n);sizeof(p2);
时间: 2023-12-06 17:03:16 浏览: 143
在64位机器上,sizeof(char)为1字节,sizeof(int)为4字节,sizeof(void*)为8字节。
1. sizeof(str) = 6,因为字符数组 "Hello" 包含了5个字符,加上结尾的 '\0',共占用6个字节。
2. sizeof(p1) = 8,因为 p1 是一个指向字符数组的指针,占用8个字节。
3. sizeof(n) = 4,因为 n 是一个 int 类型的变量,占用4个字节。
4. sizeof(p2) = 8,因为 p2 是一个指向 void 类型的指针,占用8个字节。
相关问题
用C语言写一个完整代码,复制字符串(不能用库函数) void copy_str(char *p1, char *p2)
在C语言中,复制字符串通常涉及到遍历源字符串,然后逐个字符地将其复制到目标字符串中。以下是一个不使用库函数实现复制字符串的示例代码:
```c
#include <stdio.h>
// 自定义复制字符串函数
void copy_str(char *p1, char *p2) {
if (p1 == NULL || p2 == NULL) {
return; // 如果输入指针为空,则直接返回
}
while (*p1) { // 遍历源字符串直到遇到字符串结束符'\0'
*p2 = *p1; // 复制字符
p1++; // 源字符串指针后移
p2++; // 目标字符串指针后移
}
*p2 = '\0'; // 在目标字符串末尾添加字符串结束符
}
// 测试函数
int main() {
char source[] = "Hello, World!";
char destination[sizeof(source)]; // 分配足够的空间来存储源字符串
copy_str(source, destination);
printf("Original string: %s\n", source);
printf("Copied string: %s\n", destination);
return 0;
}
```
在这段代码中,`copy_str` 函数接受两个字符指针参数:`p1` 作为源字符串的指针,`p2` 作为目标字符串的指针。函数内部通过循环遍历源字符串,并将每个字符逐个复制到目标字符串中。当遇到源字符串的结束符(`'\0'`)时,循环结束。最后,将目标字符串的结束符也设置为 `'\0'`,确保它是一个正确格式的字符串。
输入3个字符串(字符串大小不超过80个字符),按由小到大的顺序输出。 要求:用函数处理,且用指针做函数参数,实现交换两个字符串:void swap(char *p1,char *p2)。
为了实现这个功能,你可以创建一个名为`sortStrings`的函数,接收三个字符串的指针作为输入,并按照字典序对它们进行排序。这里我们假设`swap`函数已经存在,用于交换两个字符串:
```c
#include <stdio.h>
#include <string.h>
// 已经存在的函数,用于交换两个字符串
void swap(char* p1, char* p2) {
char temp[81];
strcpy(temp, p1);
strcpy(p1, p2);
strcpy(p2, temp);
}
// 按字典序从小到大排序并输出
void sortStrings(char** strings, int count) {
for (int i = 0; i < count - 1; i++) {
for (int j = 0; j < count - i - 1; j++) {
if (strcmp(strings[j], strings[j + 1]) > 0) {
// 使用swap函数交换字符串
swap(strings+j, strings+j+1);
}
}
}
// 输出排序后的字符串数组
for (int i = 0; i < count; i++) {
printf("%s ", strings[i]);
}
printf("\n");
}
int main() {
char* str1 = "hello";
char* str2 = "world";
char* str3 = "test";
char* stringArray[] = {str1, str2, str3};
int numStrings = sizeof(stringArray) / sizeof(*stringArray);
sortStrings(stringArray, numStrings);
return 0;
}
```
在这个例子中,`sortStrings`函数首先通过嵌套循环比较相邻的字符串,如果前者的字典序大于后者,则调用`swap`函数交换它们的位置。最后,函数会遍历排序后的字符串数组并输出。
阅读全文