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

请问一个指针的有关问题,被指针伤到了

2012-08-29 
请教一个指针的问题,被指针伤到了下面这段代码在输入第二组数据时会出错C/C++ code#includestdio.h#incl

请教一个指针的问题,被指针伤到了
下面这段代码在输入第二组数据时会出错

C/C++ code
#include<stdio.h>#include<string.h> using namespace std;char str[10][10],s[10]; void fun(char **str,char *s){    if(str[0]!=NULL)        printf("temp == %s\n",str[0]); } int main(){       while(scanf("%s",&s)==1)      {                                 fun((char**)str,s);                      strcpy(str[0],s);             printf("str == %s \n",str[0]);                                                 }         return 0;}


而fun函数如果是空函数的话就没问题,为什么?
C/C++ code
#include<stdio.h>#include<string.h> using namespace std;char str[10][10],s[10]; void fun(char **str,char *s){//    if(str[0]!=NULL)//        printf("temp == %s\n",str[0]); } int main(){       while(scanf("%s",&s)==1)      {                                 fun((char**)str,s);                      strcpy(str[0],s);             printf("str == %s \n",str[0]);                                                 }         return 0;}


[解决办法]
C/C++ code
#include <stdio.h>#include <string.h> char str[10][10],s[10]; void fun(char **str,char *s){    if(str[0]!=NULL)        printf("temp == %s\n",str); // 楼主自己看下这一行与你的有什么区别} int main(){        while(scanf("%s",&s)==1)    {         fun((char **)str,s);        strcpy(str[0],s);          printf("str == %s \n",str[0]);     }     return 0;}
[解决办法]
二维数组不等于二级指针

void fun(char **_str,char p[][10],char *s)
{
printf("%s",_str[0]); //错
printf("%s",p[0]); //对
return;
}

fun((char**)str,str,s);

二级指针_str指向的是整个数组 
p指向的是第一行
虽然地址都一样 但是解析范围不一样

一样道理 
char str[10][10];
char **k = (char**) str;
strcpy(str[0],"123");
printf("%s",str[0]); //对
printf("%s",k[0]); //错


[解决办法]
二级指针不能直接对应于二维数组
此例中二级指针的使用必须需要一级指针,这个一级指针提供一维数组的信息----元素个数!
调用传参时
形参str(纯二级指针变量--没有任何数组概念)由实参str(实际是&str[0])初始化,即形参str指向了实参数组的首行,后果是形参str并不知道实参数组的行数和列数,并且它将它指向位置(实参数组首行的前四个字符码值)的值当作一级指针来用!

测试:
char str[10][10]={"ABCD"};

void fun(char **str,char *s)
{
printf("%p\n",*str);//应该是ABCD的ASCII码值 



[解决办法]
如果希望使用二级指针来引用二维数组
那么在传递函数参数的时候,请带上数组第1维的维数
这样可以通知编译器,这个二级指针指向的是二维数组
那么在进行下标运算的时候,编译器就知道如何行动了

指针和数组还是有区别的
建议楼主搜索一下相关资料
或者可以读一本书 《C和指针》

热点排行