相关疑难解决方法(0)

sizeof表现出乎意料

请考虑以下代码:

  #include <stdio.h>
  int main(void)
  {
    int a[10];
    printf("%d",(int)sizeof(a)); //prints 10*sizeof(int) (40 on my compiler)
    printf("%d",(int)sizeof(a-3)); //prints sizeof(int) (4 on my compiler)

  }
Run Code Online (Sandbox Code Playgroud)

我知道这sizeof()是一个编译时运算符,但我很惊讶地看到第二个输出printf().可能是什么原因?是否存在sizeof()从数组类型到整数类型的参数的隐式转换?

c

12
推荐指数
2
解决办法
507
查看次数

数组类型 - 指定/用作函数参数的规则

当我需要将一个数组传递给一个函数时,似乎所有以下函数声明都可以工作

void f(int arr[])  
void f(int arr[4]) // is this one correct?
Run Code Online (Sandbox Code Playgroud)

为了这:

int a[]={1,2,3,4};
f(a);
Run Code Online (Sandbox Code Playgroud)

但是当我将一个数组分配给另一个数组时,它就失败了

int a[]={1,2,3,4};
int b[4] = a; // error: array must be initialized with a brace-enclosed initializer
Run Code Online (Sandbox Code Playgroud)

那么为什么作为函数的参数传递的数组是可以的,但是在简单赋值的rhs上使用是错误的?

c arrays initialization variable-assignment

6
推荐指数
3
解决办法
3065
查看次数

sizeof运算符在C中有什么参数?

[ 原标题称为'sizeof function'.]

我尝试了这些,他们都工作:

char *p;

printf("Size of *p is %d\n",sizeof(*p));  //result =1
printf("Size of  p is %d\n",sizeof( p));  //result =4
printf("Size of  p is %d\n",sizeof(&p));  //result =4

我想知道为什么第一个printf是1,第二个和第三个是4?那么sizeof可以实际采用什么参数呢?

c parameters pointers arguments sizeof

2
推荐指数
3
解决办法
4922
查看次数