C指针题目讲解(下)

简介: C指针题目讲解

题目六:


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));//10,5
  return 0;
}

这个题目比较简单。直接分析


1669214508451.jpg


题目七:


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

分析:

1669214523525.jpg


题目八:


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;
}

这个题目初看真的吓人,但是不必慌张,对于这种比较复杂的指针题,我们需要画出它在内存中的存储,这样方便我们分析.


第一问:


1669214541667.jpg


第一问图:


1669214550969.jpg


第二问:


1669214557616.jpg

1669214566194.jpg


温馨提示:在做这道题的时候一定要注意++和--的副作用.


第三问:

1669214577600.jpg

1669214586599.jpg


第四问:


在第三问里面虽然CPP指向了C+3,但是不是++和--,所以没有副作用,不会改变在第四问还是指向C。

1669214596610.jpg

1669214604838.jpg

好了,本期的分享就到这里了,剑心谢谢各位停留浏览啦、、

相关文章
|
5月前
|
C语言
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
|
5月前
|
存储 C语言 C++
C语言------------指针笔试题目深度剖析
C语言------------指针笔试题目深度剖析
43 1
|
存储 编译器 C语言
数组、指针练习题及解析(含笔试题目讲解)其一(上)
数组、指针练习题及解析(含笔试题目讲解)其一
93 0
|
存储 编译器 C语言
C语言: 数组指针/指针数组等相关的选择题目
C语言: 数组指针/指针数组等相关的选择题目
|
10月前
|
存储
1.C语言题目---指针类(基础)
1.C语言题目---指针类(基础)
57 1
|
2月前
|
存储 编译器 C语言
【C语言】指针练习题目
【C语言】指针练习题目
|
4月前
|
算法
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
|
4月前
|
算法 容器
【经典LeetCode算法题目专栏分类】【第1期】左右双指针系列:盛最多水的容器、接雨水、回文子串、三数之和
【经典LeetCode算法题目专栏分类】【第1期】左右双指针系列:盛最多水的容器、接雨水、回文子串、三数之和
|
4月前
|
存储 SQL 算法
LeetCode 题目 117:填充每个节点的下一个右侧节点指针 II
LeetCode 题目 117:填充每个节点的下一个右侧节点指针 II