首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C和指针一条题目请问

2012-02-13 
C和指针一条题目请教?int array [20]int **ptrarray问 ptr+1指向哪里?我的答案是指向*array[1]?[解决办

C和指针一条题目请教?
int array [20];
int **ptr=array; 
问 ptr+1指向哪里?
我的答案是指向*array[1]?

[解决办法]
int array [20];
int **ptr=array; —— 这个不能赋值吧?
[解决办法]
这题目哪来的?
[解决办法]
可以认为这是一条错误的语句.
[解决办法]

探讨
int array [20];
int **ptr=array; —— 这个不能赋值吧?

[解决办法]
int **ptr=array; 编译通不过
[解决办法]
int array [20];改成
int (*array) [20];则答案就是你想要的
[解决办法]
探讨

int **ptr=array; 编译通不过

[解决办法]
探讨

那答案是什么?
引用:
引用:

int **ptr=array; 编译通不过

CODEBLOCKS中可以编译通过,但会报警告.

[解决办法]
探讨
int array [20];
int **ptr=array; —— 这个不能赋值吧?

[解决办法]
探讨

那答案是什么?
引用:
引用:

int **ptr=array; 编译通不过

CODEBLOCKS中可以编译通过,但会报警告.

[解决办法]
探讨
引用:
int array [20];
int **ptr=array; —— 这个不能赋值吧?

C和指针273页,题目2
暂时不讨论编译器问题,假如可以答案是什么?

[解决办法]
我前面好像改的不对,既然你只是要知道它指向什么,那么我认为
指向地址 &array + 1
[解决办法]
不是,它根本没有指向array的内容,而只是在array的地址上加了1而已,这个地址很可能是未分配的
[解决办法]
int **ptr是指向指针的指针。
[解决办法]
这题目坑人的,,
[解决办法]
探讨
我前面好像改的不对,既然你只是要知道它指向什么,那么我认为
指向地址 &array + 1

[解决办法]
以下是我的理解:


int a[N][M];
int **p;

前者的内存分配一定是连续的,例如 a[k][M-1] 的地址和 a[k+1][0] 的地址一定是连续的 (k+1 < N)

所以,在作为参数传递的时候,可以自动退化成 int (*a)[M] 
(*a)[M] 是个指针,指向一数组
看 这个指针如何初始化

C/C++ code
        typedef int (*A)[10];    A a;    a = (A)malloc(sizeof(int) * 10);
[解决办法]
int array [20];
int **ptr=array; //编译出错,不信你看。。。
[解决办法]
应该写成这样int array[20];
int **ptr=&array;
看清楚了...
[解决办法]
如果编译都通不过。那讨论指向哪个内存数据好象无意义吧
[解决办法]
使用指针还是谨慎为好。
------解决方案--------------------


感觉很简单,但是总是不太清楚。
[解决办法]

探讨
int array [20];
int **ptr=array;
问 ptr+1指向哪里?
我的答案是指向*array[1]?

[解决办法]
探讨
int array [20];
int **ptr=array;
问 ptr+1指向哪里?
我的答案是指向*array[1]?

[解决办法]
int a[20];
int **p;
p是二级指针,二级指针是用于指向指针的指针,也就是说它所批针的对象必须也是一个指针
只能这样用.
int a[20];
int *p = a;
int **s = &p;
如果直接这样用:
s = a;
在C编译器下会报这个警告int ** ' differs in levels of indirection from 'int *
这两种变量的类型是不一样的,就相当于这样
int a;
int **p = &a;
你说这样做对吗?
二级指针是指向指针的指针,int a[2],,, 数组名a相当于数组的首地址,如果用&a就是指向这个一维数组的地址,意义一定要区分开来,



[解决办法]
引用int array [20];
int **ptr=array;
问 ptr+1指向哪里?

[解决办法]
探讨
引用int array [20];
int **ptr=array;
问 ptr+1指向哪里?

int **ptr是一个指向指针的指针。

一个指针+1的地址偏移量就是他指向的变量的大小。

那么,ptr+1的地址偏移就是一个指针的大小。

ptr指向array数组的首地址,那么ptr+1的值就是array数组的首地址加上一个指针类型变量的大小。

[解决办法]
我觉得他的本意应该是一个二维指针,指向指针的指针,不过应该写成:
int **ptr=&array
[解决办法]
就看看 不说话

热点排行