关于指针和字符串的一些题目

一.指针题


1.用变量a给出下面的定义


一个整型数
int a;
一个指向整型数的指针
int *a;
一个指向指针的指针,它指向的指针是指向一个整型数
int **a;
一个有10个整型数的数组
int a[10];
一个有10个指针的数组,该指针是指向一个整型数的
int *a[10];      // []的优先级要高于*  
一个指向有10个整型数数组的指针
int (*a)[10];
一个指向函数的指针,该函数有一个整型参数并返回一个整型数
int (*a)(int )
一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数
int (*a[10])(int )



2.下面的数据声明代表什么?
float(**def)[10];
def是一个指向指针的指针,该指针指向一个有十个float元素的数组
double*(*gh)[10];
gh是一个指针,该指针指向一个有十个double指针元素的数组
double(*f[10])();
f是一个数组,该数组有十个指针,指针指向一个函数,该函数没有参数,返回值是double
int*((*b)[10]);
b是一个指针,该指针指向一个有十个元素的数组,该数组内元素是int类型的指针
long(*fun)(int);
fun是一个指向函数的指针,该函数有一个int类型的参数,返回值是long
int(*(*f)(int,int))(int);
f是一个指向函数的指针,该函数有两个返回值都是int类型,该函数返回值是一个指针,
指向一个函数,这个函数有一个int类型的参数,并且返回一个int


——————————————————————————————————————


二.一些指针问题(包含一些笔试题)


1.如果f是一个函数,请说明 f() 和f的意思。
        f()是调用这个函数,f是函数的地址


2.怎样理解数组的下标运算?
相当于间接引用,a[1]就代表了数组的第一个元素


3.int *p,*q; int a[]={10,20,30,40}; p=&a[0];  q=&a[3]; 请问q-p等于多少?
          3


4.请说明int aa(char s[])   和 int aa(char *p)的区别?
       没有区别,[]定义在函数的形参里代表指针


5.char *p,*q;  p=”xyz”;   q=p; 请问q=p; 这个赋值语句有没有复制内存中的字符?
       没有复制,p中装着字符串常量xyz的首地址,q只复制了地址
  char p,q;    p=’a’;    q=p;  请问q=p; 这个赋值语句有没有复制内存中的字符?
       复制了


6.int a[]={1,2,3,4};  a++;上面的语句是否可行?如果不可行,请指出错误。
      不可以,因为a是数组名,是一个常量,不可以++


7.int a[]={1,2,3,4}; int *p=a+1; p++; 上面语句是否可行?如果不可行,请指出错误。
      可以,p中装着数组元素2的地址,p++也就是把指针向后移动了一个


8.请问怎么打印出指针的地址?
printf("%p",&p);


9.int *p,**q,a=6; p=&a;q=&(&a); 请问上面的语句是否可行?如果不行,请指出错误
       不可行,地址没有内存空间不能再取地址 改为 int*p,**q,a=6;p=&a;q=&p。
       不能再对一个地址取地址


10.请问int *p; *p=10; 请问上述语句是否正确?如果错误,请指出错误。
       不正确,指针没有初始化,它就是个常量,不能对它进行赋值操作


11.请问int *p=NULL;的意义?
       定义了一个指针变量,其中装的是空   


12.请问内存是在变量定义时分配的还是在变量赋值时分配的?
       在变量定义时分配


13.char *p=”abcdef”; 请问p[3]是什么意思?
       间接引用字符串常量中第四个元素的地址


14.char *p=”abcdef”; float *pip=3.134;  请问上述语句是否正确?如果错误,请更正。
       前半句正确,后半句不正确,pip只一个指针变量,只能装地址,而3.134是常量


15.char *p=”abcd”; *p=’b’; 请问上述语句是否正确?如果错误,请说明原因。
正确,前半句p中装着字符串常量的首地址,后半句把p指向的那块空间装上p


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 是否相等?
        相等ca中装的是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’请问以上语句是否正确?
       正确
20.char a[][10]={“abcd”,”aaaa”}; char b[2][]={“abcd”,”aaaa”};请问以上语句是否正确?
        定义b的时候不正确




-------------------------------------------------------


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值