int a[9];*p=a;则p的字节是多少
时间: 2024-05-31 21:11:40 浏览: 10
在这个语句中,`*p=a` 实际上是把数组 `a` 的首地址赋值给指针变量 `p`,因此 `p` 的字节大小与指针变量的类型有关。假设 `p` 是一个 32 位系统上的整型指针,则 `p` 占用 4 个字节。而 `a` 是一个包含 9 个整型元素的数组,每个整型元素占用 4 个字节,因此 `a` 的总大小为 9 * 4 = 36 个字节。
相关问题
c++int *p =(int*)malloc(5)
这段 C 代码中存在一个错误。malloc 函数的参数应该是要分配的字节数,而不是要分配的元素个数。因此,正确的写法应该是:
```c
int *p = (int*)malloc(5 * sizeof(int));
```
这里的 `sizeof(int)` 表示一个 `int` 类型的变量占用的字节数,通常是 4 个字节(32 位系统)或 8 个字节(64 位系统)。所以,上面的代码分配了 5 个 `int` 类型的变量所需的总字节数,并将其赋值给指针变量 `p`。
#include<stdio.h> int *pstract (int*,int*); int main(void) { int s1[5]={1,2,3,4,5}; int s2[3]={1,2,3}; int *w; w = pstract(s1,s2); printf("%s",s1); return 0; } int *pstract(int *s1,int *s2) { int n; int *q = s2; int *p = s1; n = sizeof(s1)/sizeof(int); p += n-1; while(*q != '\0') { *p = *q; p++; q++; } *++q='\0'; p = s1; return p; }
这段代码存在一些问题,可能会导致程序崩溃或者输出错误结果。
1. 在函数 pstract 中,使用 sizeof(s1)/sizeof(int) 来计算数组 s1 的元素个数是不正确的。因为在函数中传递的数组参数 s1 实际上是一个指针,sizeof(s1) 返回的是指针类型的字节数,而不是数组的总字节数。应该在调用函数时,同时传递数组的长度信息。
2. 在函数 pstract 中,往数组 s1 中添加元素时,没有判断 s1 的长度是否足够。这可能会导致数组越界访问,从而导致程序崩溃或者输出错误结果。
3. 在主函数中,使用 printf("%s",s1) 来输出数组 s1 的内容,这是错误的。因为数组 s1 中存储的是整数类型的数据,而不是字符串类型的数据。应该使用循环逐个输出数组中的元素。
下面是一种可能的修改方案:
```
#include <stdio.h>
int *pstract(int*, int*, int);
int main(void)
{
int s1[5] = {1, 2, 3, 4, 5};
int s2[3] = {1, 2, 3};
int *w;
w = pstract(s1, s2, 5);
for (int i = 0; i < 5; i++) {
printf("%d ", s1[i]);
}
printf("\n");
return 0;
}
int *pstract(int *s1, int *s2, int len)
{
int *q = s2;
int *p = s1 + len - 1;
while (*q != '\0' && p >= s1) {
*p-- = *q++;
}
return s1;
}
```
修改后的程序中,将数组长度作为参数传递给函数 pstract,避免了使用 sizeof 计算数组长度的问题。在函数 pstract 中,加入了对 s1 数组长度的判断,避免了数组越界访问的问题。在主函数中,使用循环逐个输出数组 s1 中的元素,避免了将整数数组误认为字符串数组的问题。