相关疑难解决方法(0)

C字符串混乱

我现在正在学习C并且对字符数组 - 字符串感到困惑.

char name[15]="Fortran";
Run Code Online (Sandbox Code Playgroud)

没问题 - 它的数组可以容纳(最多?)15个字符

char name[]="Fortran";
Run Code Online (Sandbox Code Playgroud)

C计算我的字符数,所以我没有 - 整洁!

char* name;
Run Code Online (Sandbox Code Playgroud)

好的.现在怎么办?我所知道的是,这可以容纳后来分配的大量字符(例如:通过用户输入),但是

  • 为什么他们称之为char指针?我知道指针作为变量的引用
  • 这是"借口"吗?这是否找到除char*之外的任何其他用途?
  • 这究竟是什么?它是指针吗?你如何正确使用它?

提前谢谢,喇嘛

c string

19
推荐指数
1
解决办法
1280
查看次数

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
查看次数

在C中,为什么数组引用a + = 2; 无效的代码

从我的演讲幻灯片中,它指出:

如下面的代码所示,可以将数组名称分配
给适当的指针,而无需前面的&运算符.

int x;  
int a[3] = {0,1,2};  
int *pa = a;  
x = *pa;  
x = *(pa + 1);  
x = *(pa + 2);  
a += 2; /* invalid */  
Run Code Online (Sandbox Code Playgroud)

为什么a += 2;无效?

谁能帮忙澄清一下?
如果你想到一个更好的标题,也可以自由编辑标题.

c arrays

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

标签 统计

c ×4

arrays ×2

initialization ×1

string ×1

variable-assignment ×1