我现在正在学习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)
好的.现在怎么办?我所知道的是,这可以容纳后来分配的大量字符(例如:通过用户输入),但是
提前谢谢,喇嘛
请考虑以下代码:
#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()从数组类型到整数类型的参数的隐式转换?
当我需要将一个数组传递给一个函数时,似乎所有以下函数声明都可以工作
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上使用是错误的?
从我的演讲幻灯片中,它指出:
如下面的代码所示,可以将数组名称分配
给适当的指针,而无需前面的&运算符.
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;无效?
谁能帮忙澄清一下?
如果你想到一个更好的标题,也可以自由编辑标题.