我知道只有当两个指针指向"分配"到分配给同一个对象的存储的某个地方时,或者如果它们是NULL,或者只要它没有被解除引用而超过对象的末尾,就会定义指针比较.
我在标准的'C'意义上使用"对象".
是否有一些特殊的分配用于比较两个指针 - 每个指针超过对象的结尾,而不是比较一个过去的结束指针和一个引用实际对象的指针表达式.鉴于以下定义:
char arr[100];
char *pend = &arr[99];
char *pa = pend+1;
char *pb = pend+1;
Run Code Online (Sandbox Code Playgroud)
是pa == pb保证有意义的比较还是调用UB,因为-pa和pb都指向arr.
换句话说,从标准的角度来看,比较pa和pb以及比较pa和&arr[99]+1?之间是否存在语义差异?看起来很明显但是:)
为什么int*数组不能直接初始化,但char*数组可以?我知道它们不一样,但导致这种情况发生的确切差异是什么(请解释原因)?
我知道为什么不能int* p[]直接初始化.
我不知道怎么可能char* name[]?
例如:
char* name[] = { "Mostafa Chamran", "Mehdi Zeinoddin", "Ebrahim Hemmat" };
Run Code Online (Sandbox Code Playgroud)
和
int* p[3] = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)
给出错误:转换无效
我不知道要搜索什么来查找相关问题,所以我不知道是否存在相同的问题