- 关于指针描述不正确:
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;
}
|