【进阶C语言】指针笔试题(详解)(二)

简介: 【进阶C语言】指针笔试题(详解)(二)

笔试题5


int main()
{
  int a[5][5];
  int(*p)[4];
  p = a;
  printf("%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);
  return 0;
}


代码结果:


图片讲解:


笔试题6


int main()
{
  int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
  int* ptr1 = (int*)(&aa + 1);
  int* ptr2 = (int*)(*(aa + 1));
  printf("%d,%d", *(ptr1 - 1), *(ptr2 - 1));
  return 0;
}


图片讲解:


笔试题7


int main()
{
  char* a[] = { "work","at","alibaba" };
  char** pa = a;
  pa++;
  printf("%s\n", *pa);
  return 0;
}


图片讲解:


笔试题8


int main()
{
  char* c[] = { "ENTER","NEW","POINT","FIRST" };
  char** cp[] = { c + 3,c + 2,c + 1,c };
  char*** cpp = cp;
  printf("%s\n", **++cpp);
  printf("%s\n", *-- * ++cpp + 3);
  printf("%s\n", *cpp[-2] + 3);
  printf("%s\n", cpp[-1][-1] + 1);
  return 0;
}


代码结果:


图片讲解:


第一个数组大致的样子:

第二个数组大致的样子:

第三个数组大致的样子:

**++p的样子:

结果为:POINT


注意:此时cpp的位置已经发生变化,从变化位置开始计算,printf(“%s\n”, *-- * ++cpp + 3)

先++:

*-- * ++cpp的样子:

printf(“%s\n”, *-- * ++cpp + 3)的样子:

printf(“%s\n”, *cpp[-2] + 3);


printf(“%s\n”, cpp[-1][-1] + 1)的样子:

变成c+2-1:

总结:

a++和a[ 1 ]不一样


如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞作为鼓励,并评论收藏一下,谢谢大家!!!

制作不易,如果大家有什么疑问或给恒川的意见,欢迎评论区留言。

相关文章
|
3天前
|
编译器 C语言
【C语言初阶】指针篇—下
【C语言初阶】指针篇—下
|
3天前
|
存储 C语言
【C语言初阶】指针篇—上
【C语言初阶】指针篇—上
|
14天前
|
搜索推荐 程序员 C语言
指针赋值与引用传递:C语言的基础知识与实践技巧
指针赋值与引用传递:C语言的基础知识与实践技巧
|
13天前
|
搜索推荐 程序员 C语言
指针赋值与引用传递:C语言的基础知识与实践技巧
指针赋值与引用传递:C语言的基础知识与实践技巧
|
19天前
|
C语言
指针进阶(C语言终)
指针进阶(C语言终)
|
19天前
|
C语言
指针进阶(回调函数)(C语言)
指针进阶(回调函数)(C语言)
|
19天前
|
存储 C语言 C++
指针进阶(函数指针)(C语言)
指针进阶(函数指针)(C语言)
|
19天前
|
编译器 C语言
指针进阶(数组指针 )(C语言)
指针进阶(数组指针 )(C语言)
|
21天前
|
存储 C语言
C语言的函数返回值和指针
C|函数返回值(区分各类值)和指针(区分各类存储空间)的细节