一、在C程序设计中,主要活动就是操纵数据

    1、数据传递:将数据作为参数传入参数和将数据作为数据返回两种

    2、函数:

      1)、函数类型:主要是指函数返回数据的类型,可以是基本类型或复杂数据类型,即使函数无需返回数据,也需要指定为void类型;

      2)、函数名称:使用合适的表达式表明函数自身,便于函数的调用,计算机更多关注的是函数的地址,程序员更多关注的是函数名称;

      3)、函数参数:将合适的数据按照固定的顺序和特定的类型传入函数,与函数内的局部变量具有同等地位的变量;

      4)、函数作用:完成某种操作或数据修改等任务即可

    3、使用指针传递数据:

      1)、可以多个函数访问指针对象,快速高效

      2)、无需声明为全局变量,可以被多个函数访问

      3)、函数访问指针对象时无需复制数组自身,只需要复制数据的地址即可 

      4)、更加便于函数修改指针指向的数据,而不仅仅是修改数据的副本 

      5)、只想使用指针传递数据的快捷,不想数据被无意修改,可以使用常量指针      

    4、代码实例(传入):

      1)、可以多个函数访问指针对象,快速高效

  #include <stdio.h>
#include <string.h>
#include <stdlib.h> void displayWelcom(char *name){
strcat(name, ", welcom you!"); printf("%s\n", name); return;
} int main(int argc, char **argv)
{
char *name = (char *)malloc(sizeof(char) * );
printf("Please input your name: ");
scanf("%s", name);
printf("Your name is: %s\n", name); printf("------------welcom--------------\n");
displayWelcom(name);
printf("------------welcom--------------\n"); return ;
}

    由于函数接受的是个指针,有可能是空指针,若函数自身没有完成内存分配,须有函数调用者完成内存的分配。

      2)、更加便于函数修改指针指向的数据,而不仅仅是修改数据的副本

  #include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h> void displayUpper(char *name){
int size = strlen(name);
for (int i = ; i < size; i++){
*(name + i) = toupper(*(name + i));
}
printf("%s\n", name); return;
} int main(int argc, char **argv)
{
char *name = (char *)malloc(sizeof(char) * );
printf("Please input your name: ");
scanf("%s", name);
printf("Your name is: %s\n", name); printf("------------uppername--------------\n");
displayUpper(name);
printf("------------uppername--------------\n"); printf("Your name is: %s\n", name); return ;
}

    虽然第21行和第27行的代码是一样的,但是由于调用displayUpper函数实现了name的大些功能,因此,在函数调用前后name的内容是不一样的,运行代码后更加清楚原理。

      3)、只想使用指针传递数据的快捷,不想数据被无意修改,可以使用常量指针

    #include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h> void displayWelcom(const char *name){
>> strcat(name, ", welcom you!"); printf("------------welcom--------------\n");
printf("%s\n", name);
printf("------------welcom--------------\n"); return;
} void displayUpper(char *name){
int size = strlen(name);
for (int i = ; i < size; i++){
*(name + i) = toupper(*(name + i));
}
printf("------------uppername--------------\n");
printf("%s\n", name);
printf("------------uppername--------------\n"); return;
} int main(int argc, char **argv)
{
char *name = (char *)malloc(sizeof(char) * );
printf("Please input your name: ");
scanf("%s", name);
printf("Your name is: %s\n", name); displayUpper(name);
displayWelcom(name); printf("Your name is: %s\n", name); return ;
}

    第7行代码显示有警告,字符串的特殊处理导致可以出结果,如果使用字符串字节赋值就不能通过编译了。

    5、代码实例(传出):

      1)、可以多个函数访问指针对象,快速高效

  #include <stdio.h>
#include <string.h>
#include <stdlib.h> char* welcom(char *name){
name = (char *)malloc(sizeof(char) * );
printf("-----------in welcom------------\n");
printf("please input your name: ");
scanf("%s", name);
printf("%s\n", name);
strcat(name, ", welcom you!"); printf("%s\n", name);
printf("-----------in welcom------------\n"); return name;
} int main(int argc, char **argv)
{
char *name;
printf("your name: %s\n", welcom(name)); return ;
}

    可以完成更加复杂的逻辑交互。

      2)、更加便于函数修改指针指向的数据,而不仅仅是修改数据的副本

  #include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h> char* guoUpper(char *name){
name = (char *)malloc(sizeof(char) * );
printf("-----------in guoUpper------------\n");
printf("Please input your name: ");
scanf("%s", name);
printf("Your name is: %s\n", name); int size = strlen(name);
for (int i = ; i < size; i++){
*(name + i) = toupper(*(name + i));
}
printf("%s\n", name);
printf("-----------in guoUpper------------\n"); return name;
} int main(int argc, char **argv)
{
char *name; printf("Your name is: %s\n", guoUpper(name)); return ;
}

    简单优雅的完成了数据的修改并返回修改后的数据。

      3)、只想使用指针传递数据的快捷,不想数据被无意修改,可以使用常量指针

最新文章

  1. ExtJS基础知识总结:常用控件使用方式(一)
  2. php 登录注册api接口代码
  3. BeautifulSoup-find,findAll
  4. JUCE 界面库显示中文乱码问题
  5. linux使用secureCRT连接(没有rsa的时候)
  6. 谈谈eclipse使用技巧一
  7. wampserver 2.5安装pear win8.1
  8. PHP商品秒杀计时实现(解决大流量方案)
  9. Atitit.词法分析的原理 理论
  10. 安卓开发_浅谈Service
  11. Linux查看所有用户用什么命令
  12. Motan:目录结构
  13. python第五天
  14. CSV工具类
  15. RHEL64 缺少ISO 9660图像 安装程序试图挂载映像#1,在硬盘上无法找到该映像
  16. videojs双击全屏幕观看,videojs动态加载视频
  17. [AHOI 2009]chess 中国象棋
  18. Day6_内置函数
  19. 【SRM-05 B】无题?
  20. Win2003打开网页时总是提示添加网址到信任站点的设置方法

热门文章

  1. DNA Pairing-freecodecamp算法题目
  2. cppoop作业:Inheritance+Composition 關係下的構造和析構
  3. CentOS7下systemd
  4. 一键生成属于自己的QQ历史报告,看看你对自己的QQ了解程度有多深?
  5. urllib、requests库整理
  6. python之函数基础总结
  7. PAT Basic 1079
  8. 实践自己的WebSite______流水
  9. Leetcode23---&gt;Merge K sorted Lists(合并k个排序的单链表)
  10. P2564 生日礼物