C语言题库----指针
1.如果f是一个函数,请说明 f() 和f的意思。
f是函数的地址,f()是函数
2.怎样理解数组的下标运算?
先偏移,后取址。
3.int *p,*q; int a[]={10,20,30,40}; p=&a[0]; q=&a[3]; 请问q-p等于多少?
%p输出 为3
%d输出为12
4.请说明int aa(char s[]) 和 int aa(char *p)的区别?
在使用上没有区别,s【】只是提醒声明的内容为数组
5.char *p,*q; p=”xyz”; q=p; 请问q=p; 这个赋值语句有没有复制内存中的字符?
没有
char p,q; p=’a’; q=p; 请问q=p; 这个赋值语句有没有复制内存中的字符?
有 pq为字符变量,不是指针
6.int a[]={1,2,3,4}; a++;上面的语句是否可行?如果不可行,请指出错误。
不可行,a为首元素的地址,不可以改变
7.int a[]={1,2,3,4}; int *p=a+1; p++; 上面语句是否可行?如果不可行,请指出错误。
可以
8.请问怎么打印出指针的地址?
printf("%p\n",p);
9.int *p,**q,a=6; p=&a; q=&(&a); 请问上面的语句是否可行?如果不行,请指出错误。
不行,不能对变量取两次地址,地址不占用额外的内存空间
10.请问int *p; *p=10; 请问上述语句是否正确?如果错误,请指出错误。
不正确,*p没有指向的内容
11.请问int *p=NULL;的意义?
p没有任何指向
12.请问内存是在变量定义时分配的还是在变量赋值时分配的?
赋值的时候分配
13.char *p=”abcdef”; 请问p[3]是什么意思?
p向后偏移3个单位后间接引用
14.char *p=”abcdef”; float *pip=3.134; 请问上述语句是否正确?如果错误,请更正。
指针是地址变量
15.char *p=”abcd”; *p=’b’; 请问上述语句是否正确?如果错误,请说明原因。
不正确,不能改变字符串常量的内容
16.在一个文件里定义int a[10]; 在另一个文件里声明extern int a[];(没有指明长度) 是否可行?
17.char c[]=”abcdefg”; void fun(char ca[10]){}; 调用函数。 请问 &c 和&ca 是否相等?
实际参数和形式参数,地址不一样,但是内容一样
++ca 和&c[1] 是否相等?
不相等
请问 &ca[1] 和 &c[1] 是否相等?
不相等
请问c 和 &c 是否相等?
相等,c是字符串常量的首地址
18.int *p,a[10]={0}; for(p=&a[9];p>=&a[0];p--){*p=1;} 请问以上语句是否会出现问题?
不会
19.char *p=”abcd”; char c[]=”abcd”; *p=’b’c[0]=’b’请问以上语句是否正确?
*p的内容指向字符串常量,是不能改变的,c【0】的内容可以改变
20.char a[][10]={“abcd”,”aaaa”}; char b[2][]={ “abcd”,”aaaa”};请问以上语句是否正确?
不正确,二维数组b没有定义类型