有关指针的问题
可能重复:
在C数组中,为什么这是真的? a [5] == 5 [a]
如果p是一个指针(比如int * p ),那么[p]意味着什么? 另外4[p]是什么意思? (即将一个标量乘以[p])
假设xyz是程序中定义的一些数据类型。 那么这是什么
void (*xyz)(void);
声明的意思?
4[p]含义与p[4]相同。 请参阅http://c-faq.com/aryptr/joke.html。
如果xyz已经是数据类型,那么这是一个错误。 如果不是,那么它就是一个名为xyz的函数指针的定义。 假设你的意思是“ void ”而不是“ coid ”,然后cdecl.org告诉我们:
声明xyz为指向函数(void)返回void
如果p被定义为int *p那么
[p]是错的! 导致错误: '['令牌之前'['预期表达式。
当0[p]是正确的!
并且0[p]与p[0]相同,同样p[4]是4[p] 。
编译器将p[4]转换为*(p + 4) ,即*(4 + p) => 4[p]
另外 ,假设你有一个数组int a[10] ,你可以通过a[i]或i[a]来访问数组的元素,
下面的例子会很有用,我认为:
int main(){
int a[5] = {1,2,3,4,5};
int* p; // similar declaration of p (you asked)
p = a;
int i= 0;
for(i=0; i < 5; i++){
printf("a[i] = %d and i[a] = %d n",a[i],i[a]);
}
printf(" using p n"); // access using pointer.
for(i=0; i < 5; i++){
printf("p[i] = %d and i[p] = %d n",p[i],i[p]);
}
}
编译和执行:
:~$ ./a.out
a[i] = 1 and i[a] = 1
a[i] = 2 and i[a] = 2
a[i] = 3 and i[a] = 3
a[i] = 4 and i[a] = 4
a[i] = 5 and i[a] = 5
using p
p[i] = 1 and i[p] = 1
p[i] = 2 and i[p] = 2
p[i] = 3 and i[p] = 3
p[i] = 4 and i[p] = 4
p[i] = 5 and i[p] = 5
[答案-2]
声明void (*xyz)(void); 创建xyz指向函数的指针,该函数返回void并且参数为void 。 ( xyz不是一个数据类型,而是一个指针变量)例如
void function(void){
// definition
}
void (*xyz)(void);
那么xyz可以分配function地址:
xyz = function;
使用xyz()可以调用function() , void (*xyz)(void)示例:
#include<stdio.h>
void function(void){
printf("n An Examplen");
}
int main(){
void (*xyz)(void);
xyz = function;
xyz();
}
现在编译并执行它:
:~$ gcc x.c
:~$ ./a.out
An Example
:~$
[p]是什么意思?
本身没有。
另外4[p]是什么意思?
由于指针运算, 4[p]意味着*(4 + p) ,即加入是可交换的,相当于*(p + 4) ,这又可以写成p[4] ,即它是由p指向的数组的第5个元素。
如果xyz是一个数据类型,那么void (*xyz)(void); 声明的意思?
那是一个语法错误。
如果xyz不是数据类型,那么它将xyz声明为一个函数指针,并返回void (即“Nothing”)。
