如果p是一个指针(比如int * p
),那么[p]
意味着什么?
4[p]
的含义是什么? (即将标量乘以[p])
假设xyz是程序中定义的某种数据类型。 那么
是什么void (*xyz)(void);
声明是什么意思? 答案 0 :(得分:6)
4[p]
表示与p[4]
相同。参见例如http://c-faq.com/aryptr/joke.html
如果xyz
已经是数据类型,那就是错误。如果没有,那么它就是一个名为xyz
的函数指针的定义。假设您的意思是“void
”而不是“coid
”,那么cdecl.org会告诉我们:
声明xyz为指向function(void)返回void
的指针
答案 1 :(得分:3)
如果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]
或{{1}访问数组元素}
以下示例将非常有用,我认为:
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]);
}
}
[ANSWER-2]
声明:~$ ./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
创建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 Example\n");
}
int main(){
void (*xyz)(void);
xyz = function;
xyz();
}
答案 2 :(得分:2)
[p]
是什么意思?
本身没什么。
4[p]
的含义是什么?
由于指针算术,4[p]
表示*(4 + p)
,假设加法是可交换的,相当于*(p + 4)
,而p[4]
又可以写为p
,一世。即它是xyz
指向的数组的第5个元素。
如果
void (*xyz)(void);
是数据类型,那么xyz
语句是什么意思?
然后是语法错误。
如果xyz
不是数据类型,则它声明void
是一个函数指针,并且返回{{1}}(即“无”)。
答案 3 :(得分:2)
1)4 [p]与p [4]相同,两者基本上均为*(p + 4),表示从数组p
开始的第5个元素。
2)xyz
是一个指向函数的指针的类型,该函数接受无争论并且不返回任何内容。
typedef void (*xyz)(void);
void func();
xyz f= func;
如果在以下时装中使用
,它也可能是函数指针本身//imagine the above typedef is omitted.
void (*xyz)(void) = func;
void (*xyz)(void); // uninitialized pointer.