- 关于指针描述不正确:
  a. free释放掉一个指针内容后,指针变量的值被置为NULL  B.32位系统下任何类型指针的长度都是4个字节  C.指针的数据类型声明的是指针实际指向内容的数据类型  D.野指针是指向未分配或者已经释放的内存地址  解释:a. free后,指针还指向原来地址,但free是为告诉系统这片内存地址可再分配,已被收回。  C 指针的数据类型,不是为了自己,自己作为指针,在它之前标记的是心中所存内容的类型。 - 关于下面代码描述正确的是:( )
  char* p = “hello bit”;  存的是常字符串"hello bit"的首字母地址 - 下面哪个是数组指针( )
  A.int** arr[10]  B.int (arr[10])  C.char *(*arr)[10]  D.char()arr[10]   
C 数组指针:指向数组,且数组存的是字符指针char *,每个数组大小为10  
如果写为 char (*arr)[10],也是数组指针,数组大小为10,所存是是char字符  
- 下面哪个是函数指针?( )
  A.int* fun(int a, int b);  B.int(*)fun(int a, int b);  C.int (*fun)(int a, int b);  D.(int *)fun(int a, int n);   
函数指针:  返回类型 (*p_name)(parse1, parse2) = &fun;  函数指针、数组指针,都是(*p)  
- 函数指针指向的函数有两个int形参并且返回一个函数指针,返回的指针指向一个有一个int形参且返回int的函数?下面哪个是正确的?( )
  A.int (*(*F)(int, int))(int)  B.int (F)(int, int)  C.int ((F)(int, int))  D.(*F)(int, int)(int)   
B是错的,A  它是一个函数指针: (*F)(int , int)  如果简单的函数指针,返回int,参数int, int (*F) (int ,int)  当它要返回一个函数指针,所以再加个*  而返回的函数指针的返回值是int,所以外面加int,且形参是int  所以 int (*(*F)(int, int))(int)  
-  
数组指针D用错了,B很标准        
   如何定义一个int类型的指针数组,数组元素个数为10个:( )  A.int a[10]  B.int (*a)[10]  C.int *a[10];  D.int (*a[10])(int);  
B:肯定对,  C:a和[10]先结合,剩余是内容:int *所以它是指针数组  D: a[10]是数组,加*表示它装着函数,装着的函数返回int,参数int。总之,函数指针数组,其中指针二字只是解释,因为所存必须是地址,所以它是个函数指针。  
- 杨氏矩阵
  有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。  要求:时间复杂度小于O(N);   
按照右下左的顺序  
int matrixFind(int arr[][5], int find, int row, int col)
{
	int x = 0;
	int y = col - 1;
	int tiaojian = 0 <= x && x <= row - 1 && 0 <= y && y <= col - 1;
	if (tiaojian)
	{
		printf("进来了\n");
		
		while (tiaojian&&arr[x][y]<find)
		{
			x++;
		}
		
		while (tiaojian&&arr[x][y] > find)
		{
			y--;
		}
		
		while (tiaojian&&arr[x][y]<find)
		{
			x++;
		}
		
		while (tiaojian && arr[x][y] > find)
		{
			y--;
		}
	}
	if (arr[x][y] == find) { return 1; }
	else { return 0; }
}
int main()
{
	int arr[3][5] = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150};
	int(*p)[5] = arr;
	int find = 0;
	scanf("%d", &find);
	
	int res = matrixFind(arr,find,3,5);
	printf("结果为:%d", res);
	return 0;
}
  
- 左旋k:
  把字符串前k个一个一个往后放   
 左旋:
char* zuoxuan(char *left, char *new, int k, int sz)
{
	int  pos = 0;
	
	char* t = left;
	for (int i = 0; i <= sz-k-1; i++)
	{
		new[i] = *(left+k);
		left++;
	}
	
	for (int i = sz-k;i<=sz-1; i++)
	{
		new[i] = *t;
		t++;
	}
	
	
	
	return new;
}
int main()
{
	char s[] = "hello";
	int sz = strlen(s);
	int k = 0;
	scanf("%d", &k);
	char new[101] = { 0 };
	char * res = zuoxuan(s, new, k, sz);
	printf("%s", res);
	return 0;
}
 
                
                
                
        
        
    
  
 
 |