该deviation
函数向我抛出以下错误:"Array subscript is not an integer"
. 如果您能帮我找到错误的原因,我将不胜感激。
float average(float data[], int n) {
float total = 0;
float *p = data;
while (p < (data + n)) {
total = total + *p;
p++;
}
return total / n;
}
float deviation(float data[], int n) {
float data_average = average(data, n);
float total;
float *p = data;
while (p < (data + n)) {
total += (data[p] - data_average) * (data[p + 1] - data_average);
} …
Run Code Online (Sandbox Code Playgroud) 当使用指向数组的指针时,我总是使用索引器访问元素,例如myPtr[i] = stuff
; 然而,我最近在查看BitConverter
实现,并发现通过实现访问元素*(myPtr + i) = stuff
.
我认为这很奇怪,因为两种方法(从我所知道的)做同样的事情,也就是说,它们返回地址myPtr + i
,除了(在我看来)索引器方法看起来更具可读性.
那么为什么微软选择以他们的方式增加指针,这两种方法之间有什么区别(是否有性能优势)?
撇开自从c99 stdbool.h
已经存在的事实,在定义处理布尔类型的宏时C
,以下是否有任何区别?
#define FALSE 0
#define TRUE 1 // Option 1
#define TRUE !FALSE // Option 2
Run Code Online (Sandbox Code Playgroud)
从这里的实例来看,它似乎没有什么区别.两种选择都有技术优势吗?(不包括第二个例子对c ++ bool
对象更好的事实.)
C没有elementsof
关键字来获取数组的元素数.所以这通常被计算所取代,sizeof(Array)/sizeof(Array[0])
但这需要重复数组变量名.
1[&Array]
是指向数组后面的第一个元素的指针,因此您可以使用:
int myArray[12] = {1,2,3};
int *pElement;
for (pElement = myArray; pElement < 1[&myArray]; pElement++)
{
...
}
Run Code Online (Sandbox Code Playgroud)
取代:
for (pElement = myArray; pElement < &myArray[sizeof(myArray)/sizeof(myArray[0])]; pElement++)
{
...
}
Run Code Online (Sandbox Code Playgroud)
你认为这太混淆了吗?
给定一个数组
myArray[5] = { 0, 1, 2, 3, 4 };
Run Code Online (Sandbox Code Playgroud)
一个元素可以作为
2[myArray]
Run Code Online (Sandbox Code Playgroud)
为什么?当我看到这个表达式时,我想象C试图访问指针"2"并且未能添加"myArray"指针增量来取消引用该地址.我错过了什么?
3 [ "zdvnngfgnfg"];
我正在阅读关于C的教程,我遇到了这种语法:
int doses[] = {1, 3, 2, 1000};
doses[3] == *(doses + 3) == *(3 + doses) == 3[doses]
Run Code Online (Sandbox Code Playgroud)
现在重点是获得int 1000
,但最后一个没有任何意义.要么它的晚期和我的大脑没有运作,它的特定于C的东西,或它的错字.我想在指针上涵盖我所有的基础知识,仔细阅读它.这意味着要理解这一切.任何答案将不胜感激!
这怎么可能是有效的C++?
void main()
{
int x = 1["WTF?"];
}
Run Code Online (Sandbox Code Playgroud)
在VC++ 10上,这个编译并在调试模式下x
,语句之后的值为84.
这是怎么回事?
int main(){
int arr[2]={30,40};
printf("%dn",i[arr]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在检查中发现了这个问题,给出的解决方案是40
但我认为它应该给出一个错误,因为我未定义.或者,可能是我遗失了一些东西.请解释我40是正确的答案?
提前致谢.
在With数组中,为什么a [5] == 5 [a]?它解释了[]
在操作者a[5]
被定义为*(a + 5)
和因为+
是可交换的,5[a]
意味着*(5 + a)
和那么两个表达式指代相同的存储器位置.精细.
但是,C在6.4.2.1中也定义了标识符不能以数字开头.在5[a]
数组中,标识符5
不是有效的标识符.为什么不5[a]
生成有关无效标识符的错误?