小甲鱼c语言 23课指针 数组和数组指针

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)!='\0';j++){
			printf("%c ",*(*(*p+i)+j));
		} 
		printf("\n");
	}
	
	return 0;
}

 

你可能感兴趣的:(c语言)