在一些旧代码我要保持,&运营商被置于阵列名称前面每当阵列是作为(无效*)参数可疑语法来访问阵列内容
下面是一个简单的例子来进行传递:
char val = 42;
char tab[10];
memcpy(&tab, &val, 1);
它用gcc或clang编译时没有错误或警告。它也给出了预期的结果。
此语法是否合法?
这是什么工作?
注:我通常使用以下语法之一:
memcpy(tab, &val, 1);
memcpy(&tab[0], &val, 1);
结语:
作为附加测试,我使用的功能拍摄(字符*)参数代替(空隙*)
我得到以下警告,如果我尝试用铿锵编译:
warning: incompatible pointer types passing 'char (*)[10]' to parameter of type 'char *' [-Wincompatible-pointer-types]
编辑1: 在原来的实例标签的尺寸1个元件的
我只是改变了大小为10,一般性起见给出。
编辑2: 如答案mentionned,memcpy的花费(无效*),而不是(字符*)
@simonc:感谢编辑 – Flibustier
不妨扔在'的memcpy(A + 0,&缬氨酸,1) “也是为了覆盖第三垒。 (我通常在*你的*常用的使用模式中使用*你的*第一个例子)。 – WhozCraig
你是不是指'memcpy(&tab,&val,1)'? –