相关疑难解决方法(0)

C程序中的“数组下标不是整数”

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)

c

6
推荐指数
1
解决办法
8万
查看次数

ptr [i]和*(ptr + i)之间有什么区别?

当使用指向数组的指针时,我总是使用索引器访问元素,例如myPtr[i] = stuff; 然而,我最近在查看BitConverter实现,并发现通过实现访问元素*(myPtr + i) = stuff.

我认为这很奇怪,因为两种方法(从我所知道的)做同样的事情,也就是说,它们返回地址myPtr + i,除了(在我看来)索引器方法看起来更具可读性.

那么为什么微软选择以他们的方式增加指针,这两种方法之间有什么区别(是否有性能优势)?

.net c# arrays pointers

6
推荐指数
1
解决办法
2285
查看次数

#define TRUE!FALSE vs #define TRUE 1

撇开自从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

6
推荐指数
1
解决办法
1万
查看次数

1 [&array]是&array [sizeof(array)/ sizeof(array [0])]的正确替换,还是太混淆了?

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)

你认为这太混淆了吗?

c arrays

6
推荐指数
1
解决办法
167
查看次数

为什么2 [myArray]有效的C语法?

重复

在C数组中为什么这是真的?a [5] == 5 [a]


给定一个数组

 myArray[5] = { 0, 1, 2, 3, 4 };
Run Code Online (Sandbox Code Playgroud)

一个元素可以作为

 2[myArray]
Run Code Online (Sandbox Code Playgroud)

为什么?当我看到这个表达式时,我想象C试图访问指针"2"并且未能添加"myArray"指针增量来取消引用该地址.我错过了什么?

c arrays syntax pointers

5
推荐指数
1
解决办法
419
查看次数


C数组算术和指针

可能重复:
在C数组中为什么这是真的?a [5] == 5 [a]

我正在阅读关于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 arrays pointers integer-arithmetic

5
推荐指数
1
解决办法
284
查看次数

用c ++中的字符串索引的整数

可能重复:
在C数组中为什么这是真的?a [5] == 5 [a]

这怎么可能是有效的C++?

void main()
{
  int x = 1["WTF?"];
}
Run Code Online (Sandbox Code Playgroud)

在VC++ 10上,这个编译并在调试模式下x,语句之后的值为84.

这是怎么回事?

c++ string indexing int integer

5
推荐指数
2
解决办法
191
查看次数

关于数组的C概念

int main(){

    int arr[2]={30,40};
    printf("%dn",i[arr]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在检查中发现了这个问题,给出的解决方案是40

但我认为它应该给出一个错误,因为我未定义.或者,可能是我遗失了一些东西.请解释我40是正确的答案?

提前致谢.

c arrays output

5
推荐指数
1
解决办法
392
查看次数

为什么5 [a]有效并且不会生成无效标识符的错误?

With数组中,为什么a [5] == 5 [a]?它解释了[]在操作者a[5]被定义为*(a + 5)和因为+是可交换的,5[a]意味着*(5 + a)和那么两个表达式指代相同的存储器位置.精细.

但是,C在6.4.2.1中也定义了标识符不能以数字开头.在5[a]数组中,标识符5不是有效的标识符.为什么不5[a]生成有关无效标识符的错误?

c arrays identifier

5
推荐指数
1
解决办法
89
查看次数