| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 256 人关注过本帖
标题:C语言指针传递问题
只看楼主 加入收藏
南国雨
Rank: 1
等 级:新手上路
帖 子:26
专家分:9
注 册:2015-2-1
结帖率:72.73%
收藏
已结贴  问题点数:10 回复次数:2 
C语言指针传递问题
程序代码:
#include<stdio.h>
int length(char *p);
int length(char *p){
    int n=0;
    while(*p!='\0'){
        n++;
        p++;
    }
    return n;
}
int main(){
    int len;
    char str[100];
    printf("input:\n");
    gets(str);
    len=length(str);
    printf("%d",len);
    return 0;
}

gets(s)函数,如果定义s为字符串指针,即char *s[100] 传递时这样写gets(s)就是错误的。必须写成gets(*s);请问这是为什么?
搜索更多相关主题的帖子: C语言 
2015-03-08 10:45
yangcaifei
Rank: 4
来 自:陕西
等 级:业余侠客
威 望:2
帖 子:127
专家分:216
注 册:2014-11-3
收藏
得分:0 
既然s被定义为字符串指针,那它就应该有明确的指向,gets函数是要求提供具体的指针地址看,从那个地方开始储存字符串,即函数gets( &addr),带的参数&addr必须是地址变量。 换句话说,不带地址变量就是不安全的,或者说是不正确的。
2015-03-08 11:32
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:10 
又是拗口的指针,实际使用中有谁要这样用呢?
要解释楼主的问题,首先要搞清楚两个问题
1、gets函数原型为:char * gets ( char * str );形参为一char类型指针。
2、数组名作为参数传递会默认为传递首地址,即指针,等效于“&数组名[0]”。
现在按楼主的要求将楼主代码略作修改如下:
#include<stdio.h>
int length(char *p);
int length(char *p){
    int n=0;
    while(*p!='\0'){
        n++;
        p++;
    }
    return n;
}
int main(){
    int len;
    char str[100];
    char *s[1];
    s[0]=str;
    printf("input:\n");
    gets(*s);
    len=length(str);
    printf("%d\n",len);
    return 0;
}
其中char *s[1];是定义了指针数组,指针数组元素指向的是char类型变量,所以s[0]=str;是合法的赋值,此时,如果使用gets(s);相当于gets(&s[0]);很显然s[0]位置处是一个指针类型的变量,并不是char类型,而gets(*s);相当于取s[0]位置处指针指向的变量,而s[0]的值指向的正是&str[0],而str正是char类型,符合gets函数形参类型。

能编个毛线衣吗?
2015-03-08 11:43
快速回复:C语言指针传递问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018759 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved