一.指针题
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.用变量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的时候不正确
-------------------------------------------------------