Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用数组和指针偏移量表示法的实际区别_C - Fatal编程技术网

C 使用数组和指针偏移量表示法的实际区别

C 使用数组和指针偏移量表示法的实际区别,c,C,这两者之间有什么不同: for (int i=0; *(strings+i) != NULL ;i++) len_strings += strlen(*(strings+i)); 以及: 或者这更像是一种风格上的差异,而两者在编译/执行方式上没有实际的差异?对于任何特定的情况或原因,一个表达式优于另一个表达式吗?C标准将E1[E2]定义为与(*((E1)+(E2))对于任何表达式E1和E2相同,因此没有语义差异 对于大多数用途,下标表示法是首选的,并且可读性更好,但是当需要为读者强调某

这两者之间有什么不同:

for (int i=0; *(strings+i) != NULL ;i++)
    len_strings += strlen(*(strings+i));
以及:


或者这更像是一种风格上的差异,而两者在编译/执行方式上没有实际的差异?对于任何特定的情况或原因,一个表达式优于另一个表达式吗?

C标准将
E1[E2]
定义为与
(*((E1)+(E2))
对于任何表达式
E1
E2
相同,因此没有语义差异


对于大多数用途,下标表示法是首选的,并且可读性更好,但是当需要为读者强调某些特定方面时,指针表示法可能很有用。

在实践中,两种变体是相同的;对于大多数人来说,数组表示法可能看起来更具可读性

但是,使用指针表示法可以稍微重写循环,这可能是一点(微观)优化,任何一个体面的优化编译器都可以做到:

for (char** ptr = strings; ptr != NULL; ++ptr)
    len_strings += strlen(*ptr);

实际的区别是,键入下标符号更容易,管理双下标比另一种方法要容易得多:
ptrptr[i][j]
vs
*(*(ptrptr+i)+j)
。大多数情况下使用下标符号。偶尔使用替代品会有好处,但不经常。
for (char** ptr = strings; ptr != NULL; ++ptr)
    len_strings += strlen(*ptr);