[C]关于函数指针参数的赋值
问题
在有一次尝试用stat()函数获取文件属性的时候,发现如果直接声明一个指针,然后把这个指针作为参数传给函数,会导致函数执行失败,原代码:
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
int main(void)
{
struct stat *sta_1;
char pth_1[] = "./c12.txt";
int re = stat(pth_1, sta_1);
printf("result = %d\n", re);
printf("size = %d\n", sta_1->st_size);
}
原因
我猜测是因为声明指针并不代表在正文创建了这个变量,实际上它只是一个属于这个类型的指针,并不指向任何变量。所以,但凡用指针传入函数赋值的情况,必须在程序正文声明这个变量。
示例代码1:
int main(void)
{
struct stat *sta_p;
struct stat stat_1;
sta_p = &stat_1;
char pth_1[] = "./c12.txt";
int re = stat(pth_1, sta_p);
printf("result = %d\n", re);
printf("size = %d\n", sta_p->st_size);
}
示例代码2:
int main(void)
{
struct stat stat_1;
char pth_1[] = "./c12.txt";
int re = stat(pth_1, &stat_1);
printf("result = %d\n", re);
printf("size = %d\n", (&stat_1)->st_size);
}
另一个案例,从文件读取内容到buff变量,也是必须在正文声明一个变量
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <stdio.h> int main(void)
{
#define BUFFER 4096
char err_1[] = "Opps~an error occurred when copy.";
char buf[BUFFER];
short rnum = ;
char copy_1_pth[] = "./c14_copy.dat";
int copy_1_fd = open(copy_1_pth, O_RDWR|O_CREAT, );
while((rnum = read(STDIN_FILENO, buf, BUFFER)) != ){
if(rnum != write(copy_1_fd, buf, rnum)){
write(STDERR_FILENO, err_1, strlen(err_1));
break;
}
}
printf("Okay.\n");
}
[C]关于函数指针参数的赋值的更多相关文章
- C++ code:函数指针参数
函数指针除了进行参数传递外,还承接申请的存储空间.释放空间等.而函数指针则主要是用来进行参数传递的,就像引用一样. 例如,我们来看一下函数指针的传递工作.在标准排序算法sort中,对于所提的整数容器v ...
- Delphi 函数指针(三大好处:灵活,委托的本质,回调机制),还可把函数指针当参数传入
首先学习: 指向非对象(一般的)函数/过程的函数指针 Pascal 中的过程类型与C语言中的函数指针相似,为了统一说法,以下称函数指针.函数指针的声明只需要参数列表:如果是函数,再加个返回值.例如声明 ...
- Delphi 函数指针(函数可以当参数)
首先学习: 指向非对象(一般的)函数/过程的函数指针 Pascal 中的过程类型与C语言中的函数指针相似,为了统一说法,以下称函数指针.函数指针的声明只需要参数列表:如果是函数,再加个返回值.例如声明 ...
- C++对C语言的拓展(5)—— 函数重载和函数指针结合
1.函数指针的介绍 函数指针指向某种特定类型,函数的类型由其参数及返回类型共同决定,与函数名无关.举例如下: int add(int nLeft,int nRight);//函数定义 该函数类型为in ...
- C++基础 inline 默认参数 函数占位参数 函数重载
1. inline内联函数 内联函数用于替换宏, 实例: 其中宏和 ++ 连用有副作用. #include "iostream" using namespace std; #def ...
- C++——将成员函数作为参数
在C++中,成员函数指针作为参数传递给其他函数和普通函数指针的传递是不同的,首先 我们来回顾一下普通函数指针的传递方法: //------------------------------------- ...
- c函数指针
#include <stdio.h> int max(int a, int b){ return a > b ? a : b; } int min(int a, int b){ re ...
- Object C函数指针@selector
其作用相当于函数指针,现在我看到的大多说用法都是在调用某些函数需要传递一个 函数指针 参数时,使用@selector.它会在当前类里面查找selector后面所跟的函数,返回一个SEL类型的值. S ...
- 成员函数指针与高效C++委托 (delegate)
下载实例源代码 - 18.5 Kb 下载开发包库文件 - 18.6 Kb 概要 很遗憾, C++ 标准中没能提供面向对象的函数指针. 面向对象的函数指针也被称为闭包(closures) 或委托(del ...
随机推荐
- 原生Ajax XMLHttpRequest对象
一.Ajax请求 - 现在常见的前后端分离项目中,一般都是服务器返回静态页面后浏览器加载完页面,运行script中的js代码,通过ajax向后端api发送异步请求获取数据,然后调用回调函数,将数据添加 ...
- vue-electron脚手架安装及说明 打包基于Vue的 桌面应用程序
今天这篇文章是讲述一下 融合了vue-cli+electron的一种新的脚手架,省去许多繁琐配置,即vue-electron. 下面就说一下安装和使用,假设你的电脑已经安装node.js,并且已经全局 ...
- 其它综合-CentOS7 忘记root密码
CentOS7 忘记root密码 长时间不用的 CentOS 机器再次开机的时候忽然忘记了密码,总不能就重装一台吧,还有好多服务在机器上,于是决定重置root的密码. 如果是已经开启的机器,需要进行关 ...
- 一些char和byte对应的字符
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 2 ...
- 动态生成table 列
table.render({ elem: '#test-table-comelist' ,url: layui.setter.base + 'list/comelist' ,cols: [[]] ,d ...
- Scrapy 框架 中间件,信号,定制命令
中间件 下载器中间件 写中间件 from scrapy.http import HtmlResponse from scrapy.http import Request class Md1(objec ...
- Python import hook
转自http://blog.konghy.cn/2016/10/25/python-import-hook/,这里有好多好文章 import hook 通常被译为 探针.我们可以认为每当导入模块的时候 ...
- platform驱动分离
目录 platform驱动分离 框架结构 与输入子系统联系 设备描述 驱动算法 注册机制 程序 测试 platform驱动分离 框架结构 与输入子系统联系 设备描述 驱动算法 注册机制 程序 测试 - ...
- Numpy 系列(九)- 结构化数组
简介 之前我们操作Numpy的数组时,都是通过索引来操作的.针对二维数组,使用索引可以完成对行.列的操作.但是这是非常不直观的.可以把二维数组想象成一个excel表格,如果表格没有列名,操作起来会 ...
- JAVA实现C/S结构小程序
程序功能: 客户端向服务器发送一个本地磁盘中的文件, 服务器程序接受后保存在其他位置. 客户端实现步骤: 创建一个客户端对象Socket,构造方法中绑定服务器的IP地址 和 端口号 使用Socket对 ...