|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- int *sever(int *, int, int);
- int *sever(int *p, int len, int n){//n是查询数字
- int *q = p+n/2;
- //记录一半位置的指针
- if (n < *q){//待查询值偏小
- return sever(p, len/2, n);
- }
- else if(n > *q){
- return sever(q, len/2, n);
- }
- else {
- return (*q == n)?q:p;
- }
- }
- int main()
- {
- int array[10] = {1,2,3,4,5,6,7,8,9,10};
- //这里我想写成下面这样就可以少定义一个指针
- //int (*q)[10] = {1,2,3,4,5,6,7,8,9,10};
- //对于这个指针我的理解是:q是一个指针、指向一个含有十个int型元素的数组,进行一层解引用跨度应该是一个int吧
- //实验代码 -- 比如我想访问数字2
- //printf("%d ", *q + 1);
- //输出结果是5
- //printf("%d ", *q + 2);
- //输出结果是9
- //综上q指针的一层解引用跨度是4,为什么呢?
- int *p = array;
- int i = 5;
-
- printf("%d", *sever(p, 10, i));
-
- return 0;
- }
复制代码
问题已经在代码中间有问题的位置,请求大佬能帮我解答一下这个问题 ,求求了
- //这里我想写成下面这样就可以少定义一个指针
- //int (*q)[10] = {1,2,3,4,5,6,7,8,9,10};
- 这种写法第一次见,我试了一下,应该写成这样
- int (*q)[10] = &(int [10]){1,2,3,4,5,6,7,8,9,10};
- 这样写没问题的
- 0x0000000100401080 <+0>: push %rbp
- 0x0000000100401081 <+1>: mov %rsp,%rbp
- 0x0000000100401084 <+4>: sub $0x50,%rsp
- 0x0000000100401088 <+8>: callq 0x100401100 <__main>
- 0x000000010040108d <+13>: movl $0x1,-0x30(%rbp)
- 0x0000000100401094 <+20>: movl $0x2,-0x2c(%rbp)
- 0x000000010040109b <+27>: movl $0x3,-0x28(%rbp)
- 0x00000001004010a2 <+34>: movl $0x4,-0x24(%rbp)
- 0x00000001004010a9 <+41>: movl $0x5,-0x20(%rbp)
- 0x00000001004010b0 <+48>: movl $0x6,-0x1c(%rbp)
- 0x00000001004010b7 <+55>: movl $0x7,-0x18(%rbp)
- 0x00000001004010be <+62>: movl $0x8,-0x14(%rbp)
- 0x00000001004010c5 <+69>: movl $0x9,-0x10(%rbp)
- 0x00000001004010cc <+76>: movl $0xa,-0xc(%rbp)
- 0x00000001004010d3 <+83>: lea -0x30(%rbp),%rax
- 0x00000001004010d7 <+87>: mov %rax,-0x8(%rbp)
- => 0x00000001004010db <+91>: mov $0x0,%eax
- 0x00000001004010e0 <+96>: add $0x50,%rsp
- 0x00000001004010e4 <+100>: pop %rbp
- 0x00000001004010e5 <+101>: retq
- int *p = array;
- p 指向数组
- *p 就是数组
- *p 和 array 是等价的
- *p + 1 就等于 array + 1
- 数组名是数组第 0 个元素的地址
- array + 1 就是 &array[0] + 1
- 一个 int 类型的地址加 1,什么概念?
- int a = 123;
- int *p = &a;
- p + 1 是什么意思?
复制代码
|
|