1.请问str[3]和*(str+3)是否完全等价?
答:完全等价
2.请问下面代码是否可以正常执行?
#include
int main(void){
int a[5]={1,2,3,4,5};
int *b;
b=&a[3];
printf("%d\n",b[-2]); //b[-2]等价于*b-2
return 0;
}
答:可以正常执行
3.为什么不可以用if(str1==str2)这样的形式来比较两个字符串?
不会, 答案:因为这样比较的是两个字符串的指针,而不是字符串本身
4.仔细阅读下列代码!
#include
int main(void){
int array[10]={0,1,2,3,4,5,6,7,8,9};
int *p=(int *)(&array+1); //因为&array是指向整个数组的首地址的
//跨度为sizeof(array)/sizeof(array[0]),也就是跨度为一个数组
//然后将他强制转换为int类型的指针
printf("%d\n",*(p-6)); //因为p指针是一个int类型的,所以-6等于指针移6个int单位
return 0;
}
5。
仔细阅读下列代码
#include
int main(void){
int array[10]={0,1,2,3,,4,5,6,7,8,9};
int *(p)[10]=&array;//数组指针指向一个数组,这个数组里有10个元素
printf("%d\n",*(*(p+1)-6));
return 0;
}
数组指针和指针数组的结合使用
#include
int main(void){
char *array[5]={"FishC","Five","Star","Good","WOW"};//指针数组,指针指向一个数组
char *(*p)[5]=&array; //char (*p)[5]=&array 这个可以表示为一个简单的指向一个带有5个元素的数组,在外边再加一个*,表示对数组中的元素还能进一步解引用, p+1的跨度为sizeof(int)*5!!!
int i,j;
for(i=0;i<5;i++){
for(j=0;*(*(*p+i)+j)!='
';j++){
printf("%c ",*(*(*p+i)+j));
}
printf("\n");
}
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)