user-0 提问: 指针操作 如何判断数组结尾

回复:
user: user-1
content: 引用 21 楼 baipv008 的回复:[quote=引用 20 楼 cjfdqchwh 的回复:] 其次，这个 &obj 的值为何是 这个值？ 跟 pHead 等“连续”不上  看来你还是弄不明白“指针的值”和“指针的地址”的区别。[/quote] 楼主问这个问题的帖子已经结贴了，应该是有所收获了

user: user-2
content: 引用 20 楼 cjfdqchwh 的回复:其次，这个 &obj 的值为何是 这个值？ 跟 pHead 等“连续”不上  看来你还是弄不明白“指针的值”和“指针的地址”的区别。

user: user-0
content: 其次，这个 &obj 的值为何是 这个值？ 跟 pHead 等“连续”不上

user: user-0

user: user-0
content: 引用 17 楼 zhuobattle 的回复:[quote=引用 12 楼 zhao4zhong1 的回复:] #include <stdio.h> int main() {     int Arry[10];     int *pArry;     int i;      for (i=0;i<10;i++) Arry[i]=i;     pArry=Arry;     while (1) {         printf("%d\n",*pArry);         pArry++;         if (pArry>=Arry+sizeof(Arry)/sizeof(Arry[0])) break;     }     return 0; }  动态分配的情况，sizeof返回4,呵呵[/quote]  我接着问您昨天那个问题： http://bbs.csdn.net/topics/390681909  为什么在 typedf struct里的数组，只是占用 2个字节？而不是4个？我截个图：

user: user-3
content: 引用 12 楼 zhao4zhong1 的回复:#include <stdio.h> int main() {     int Arry[10];     int *pArry;     int i;      for (i=0;i<10;i++) Arry[i]=i;     pArry=Arry;     while (1) {         printf("%d\n",*pArry);         pArry++;         if (pArry>=Arry+sizeof(Arry)/sizeof(Arry[0])) break;     }     return 0; } //0 //1 //2 //3 //4 //5 //6 //7 //8 //9 //  动态分配的情况，sizeof返回4,呵呵

user: user-0
content: 引用 15 楼 zhou19891113 的回复:通过你的描述我理解了两种可能性： 1.你想编写一个shellcode注入别人的代码，在代码中你找到了别人使用数组的地方，想扫描这个数组，但是需要判断这个数组有多大，根据你的描述，这块内存是动态增长的，所以这块空间和数组有一定区别，是不能通过sizeof直接得到大小，并且C语言没有获取一个地址的所指向空间的大小的机制，因此，这种情况，只有通过更进一步分析汇编代码解决。 2.你自己写的代码自己却不知道分配的数组有多大，即使是动态分配的，也不应该出现这样的情况，如果真的 出现这样的情况，建议楼主继续学习C语言和数据结构相关知识，多编代码，多学习，这样可以有效避免这样的情况。 呵呵

user: user-2
content: 引用 23 楼 u010551600 的回复:[quote=引用 21 楼 baipv008 的回复:] [quote=引用 20 楼 cjfdqchwh 的回复:] 其次，这个 &obj 的值为何是 这个值？ 跟 pHead 等“连续”不上  看来你还是弄不明白“指针的值”和“指针的地址”的区别。[/quote] 大神，能不能给我解释一下，这是因为什么？为什么指针的地址加4，但输出的是1呢？ #include<iostream>  using namespace std;  void main() { 	int arry[10]; 	for(int i = 0 ; i< 10 ; ++ i) 	{ 		arry[i] = i ; 	} 	int * pArry  = arry ;   	cout<<" pArry = "<<pArry<<endl; 	int *p1 = pArry ; 	cout<<"++ pArry = "<< ++pArry <<endl; 	cout<<"++pArry - pArry = "<<pArry - p1 <<endl;   	while(1 ) 	{ 		cout<< * pArry<<"  "; 		++ pArry; 		if( pArry >= arry + sizeof(arry) / sizeof(arry[0] )) 			break;  	} 	cout<<endl;  }[/quote] 指针+1，地址加指针类型的大小。

user: user-4
content: 引用 21 楼 baipv008 的回复:[quote=引用 20 楼 cjfdqchwh 的回复:] 其次，这个 &obj 的值为何是 这个值？ 跟 pHead 等“连续”不上  看来你还是弄不明白“指针的值”和“指针的地址”的区别。[/quote] 大神，能不能给我解释一下，这是因为什么？为什么指针的地址加4，但输出的是1呢？ #include<iostream>  using namespace std;  void main() { 	int arry[10]; 	for(int i = 0 ; i< 10 ; ++ i) 	{ 		arry[i] = i ; 	} 	int * pArry  = arry ;   	cout<<" pArry = "<<pArry<<endl; 	int *p1 = pArry ; 	cout<<"++ pArry = "<< ++pArry <<endl; 	cout<<"++pArry - pArry = "<<pArry - p1 <<endl;   	while(1 ) 	{ 		cout<< * pArry<<"  "; 		++ pArry; 		if( pArry >= arry + sizeof(arry) / sizeof(arry[0] )) 			break;  	} 	cout<<endl;  }

user: user-1
content: 引用 3 楼 cjfdqchwh 的回复:[quote=引用 2 楼 ovoovo 的回复:] 通过元素个数判断。不能通过指针等于某个值。  恩，这倒是一个方法。 但是我的实际情况是，这个处理方式，不太适应：   有一个巨大的数据，我编写了一个爬虫程序，不断地爬行着，无法知道哪元素个数是多大 [/quote] 数组定义的时候不需要定义个数吗？

user: user-0
content: 引用 2 楼 ovoovo 的回复:通过元素个数判断。不能通过指针等于某个值。  恩，这倒是一个方法。 但是我的实际情况是，这个处理方式，不太适应：   有一个巨大的数据，我编写了一个爬虫程序，不断地爬行着，无法知道哪元素个数是多大

user: user-5
content: 通过元素个数判断。不能通过指针等于某个值。

user: user-0
content: 问题：     如何判断 数组结尾了？

user: user-6
content: 引用 6 楼 cjfdqchwh 的回复:[quote=引用 4 楼 bijiaoben 的回复:] [quote=引用 3 楼 cjfdqchwh 的回复:] [quote=引用 2 楼 ovoovo 的回复:] 通过元素个数判断。不能通过指针等于某个值。  恩，这倒是一个方法。 但是我的实际情况是，这个处理方式，不太适应：   有一个巨大的数据，我编写了一个爬虫程序，不断地爬行着，无法知道哪元素个数是多大 [/quote] 数组定义的时候不需要定义个数吗？[/quote]  引用 5 楼 starytx 的回复:数组定义的时候没有大小？动态开辟的话也有个变量吧。没有这个大小信息无法判断是否结束  不好意思，是我描述的不恰当。  数据时刻在不断地增加着，这里的这个数组，算是一个缓冲，我本意是想问……。 [/quote]   通过你的描述我理解了两种可能性： 1.你想编写一个shellcode注入别人的代码，在代码中你找到了别人使用数组的地方，想扫描这个数组，但是需要判断这个数组有多大，根据你的描述，这块内存是动态增长的，所以这块空间和数组有一定区别，是不能通过sizeof直接得到大小，并且C语言没有获取一个地址的所指向空间的大小的机制，因此，这种情况，只有通过更进一步分析汇编代码解决。 2.你自己写的代码自己却不知道分配的数组有多大，即使是动态分配的，也不应该出现这样的情况，如果真的 出现这样的情况，建议楼主继续学习C语言和数据结构相关知识，多编代码，多学习，这样可以有效避免这样的情况。

user: user-7
content: 对于C的数组来说，必需自己记着数组的大小。

user: user-4
content: 赵老师好强！！！

user: user-8
content: #include <stdio.h> int main() {     int Arry[10];     int *pArry;     int i;      for (i=0;i<10;i++) Arry[i]=i;     pArry=Arry;     while (1) {         printf("%d\n",*pArry);         pArry++;         if (pArry>=Arry+sizeof(Arry)/sizeof(Arry[0])) break;     }     return 0; } //0 //1 //2 //3 //4 //5 //6 //7 //8 //9 //

user: user-0
content: 引用 10 楼 user-9 的回复: 你自己都不知道啥时候结束，怎么让程序知道什么时候结束呢。  对于你发的这个表情，鄙人表示非常反感，真想痛揍这只泼猴

user: user-9
content: 引用 9 楼 cjfdqchwh 的回复:[quote=引用 8 楼 starytx 的回复:] 那你这个数据的结构是什么？动态扩展的数组？如果是数组，那你顶定义一个计数器变量，在每次增加成员时让这个计数器自增，不久知道有多少个元素了？不明白你在纠结什么  难得糊涂，难得纠结。[/quote] 你自己都不知道啥时候结束，怎么让程序知道什么时候结束呢。

user: user-0
content: 引用 8 楼 starytx 的回复:那你这个数据的结构是什么？动态扩展的数组？如果是数组，那你顶定义一个计数器变量，在每次增加成员时让这个计数器自增，不久知道有多少个元素了？不明白你在纠结什么  难得糊涂，难得纠结。