有关指针的问题
可能重复:
在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”)。