char arr[]={"hello"} 计算sizeof(arr) sizeof(*arr) sizeof(**arr)
时间: 2024-01-17 08:53:35 浏览: 75
对于 `char arr[]={"hello"}`,计算 `sizeof(arr)`、`sizeof(*arr)` 和 `sizeof(**arr)` 的结果如下:
- `sizeof(arr)`:该数组的大小为 6(包括字符串末尾的空字符 \0),因为 `arr` 中包含 6 个 `char` 类型的元素。
- `sizeof(*arr)`:`*arr` 表示数组的第一个元素,即 `arr[0]`,其类型为 `char`,因此 `sizeof(*arr)` 的结果为 1。
- `sizeof(**arr)`:`**arr` 表示数组的第一个元素的第一个字符,即 `arr[0][0]`,其类型为 `char`,因此 `sizeof(**arr)` 的结果为 1。
相关问题
long long* arr = malloc(sizeof(long long) * 4);
这段代码使用了动态内存分配函数`malloc`来为一个长长整型(`long long`)数组分配内存空间。根据代码中的`sizeof(long long) * 4`,它将为4个长长整型元素分配足够的内存空间。`malloc`函数返回一个指向分配内存的指针,这里将其赋值给了`arr`变量。
需要注意的是,在使用完动态分配的内存后,应该使用`free`函数释放这些内存,以避免内存泄漏。例如,可以在不再需要使用`arr`时调用`free(arr)`来释放分配的内存空间。
int main() { int n; scanf("%d", &n); char** arr; arr = (char**)malloc(n * sizeof(char*)); for (int i = 0; i < n; i++){ arr[i] = (char*)malloc(sizeof(char)); } for (int i = 0; i < n; i++) { scanf("%s", arr[i]); } solution(n, arr); return 0; }
这段代码中,我们首先从标准输入中读入一个整数 n,然后动态分配一个 char 类型的二维数组 arr,它有 n 行,每行只有一个字符,读入 n 个字符串后调用了函数 solution。
不过需要注意的是,每次调用 malloc 分配内存时,应该给出所需内存大小,而不是固定的 1。因此,第 7 行中应该改为 `arr[i] = (char*)malloc((MAX_LENGTH + 1) * sizeof(char));`,其中 MAX_LENGTH 是字符串的最大长度。
阅读全文