初学C遇到的一些知识点汇总

本文档介绍了C语言中的基本概念,包括无条件退出函数void exit(int)、主函数参数int main(int argc, char* argv[])的使用,以及union类型的特性。并通过一个使用OpenCV的图像处理实例展示了如何读取并反色显示图像。
<span style="font-family: arial, 'courier new', courier, 宋体, monospace; white-space: pre-wrap;">本人是以C#为入门语言,现在开始学习数字图像处理,正在学习c语言,在这方面还是小白,所以打算把遇到的问题进行简单的罗列,并无先后主次之分,只是方便以后查找。</span>

1.关于void exit(int);
作用是无条件的退出程序,括号里可以是任何整型常量,作用都是一样的;
你可以根据习惯设置不同的值表示不同原因的退出,
例如exit(0)可以在正常退出此程序时使用,而exit(1)用来代表由于错误导致的结束.

2.int main(int argc,char *argv[])详解
  部分内容来自http://www.cnblogs.com/avril/archive/2010/03/22/1691477.html
  用于用户在cmd命令执行程序中键入命令行来调用程序时,这样使用通常情况下需要向程序传递参数
  argc记录了用户在运行程序的命令行中输入的参数的个数。  
  argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数是命令行后面跟的用户输入的参数
   程序示例一:
   int   main(int   argc,   char*   argv[])  
   {  
   int   i;  
   for   (i   =   0;   i<argc;   i++)  
   cout<<argv[i]<<endl;  
   cin>>i;  
   return   0;  
   }  
   执行时在cmd窗口中敲入  
   F:\MYDOCU~1\TEMPCODE\D1\DEBUG\D1.EXE   aaaa   bbb   ccc   ddd  
   输出如下:  
   F:\MYDOCU~1\TEMPCODE\D1\DEBUG\D1.EXE  
   aaaa  
   bbb  
   ccc  
   ddd  
   程序示例二:
该程序从文件中读入一幅图像,将之反色,然后显示出来. 来源:OpenCV中文网
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cv.h>
#include <highgui.h> 
 
<span style="font-size:14px;">int main(int argc, char *argv[])
{
  IplImage* img = 0; 
  int height,width,step,channels;
  uchar *data;
  int i,j,k; 
 
  if(argc<2){
    printf("Usage: main <image-file-name>\n\7");
    exit(0);
  } 
 
  // load an image  
  img=cvLoadImage(argv[1]);
  if(!img){
    printf("Could not load image file: %s\n",argv[1]);
    exit(0);
  } 
 
  // get the image data
  height    = img->height;
  width     = img->width;
  step      = img->widthStep;
  channels  = img->nChannels;
  data      = (uchar *)img->imageData;
  printf("Processing a %dx%d image with %d channels\n",height,width,channels); 
 
  // create a window
  cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE); 
  cvMoveWindow("mainWin", 100, 100); 
 
  // invert the image
  // 相当于 cvNot(img);
  // IplImage *pDstImg = cvCreateImage(cvGetSize(img),img->depth,img->nChannels);
  // cvNot(img, pDstImg);
  for(i=0;i<height;i++) for(j=0;j<width;j++) for(k=0;k<channels;k++)
    data[i*step+j*channels+k]=255-data[i*step+j*channels+k]; 
 
  // show the image
  cvShowImage("mainWin", img ); 
 
  // wait for a key
  cvWaitKey(0); 
 
  // release the image
  cvReleaseImage(&img );
  return 0;
}</span>
在CMD中输入程序地址及图片所在位置(注意不是相对位置),例如:
C:\Users\Administrator\Desktop\lena\x64\Debug\lena.exe  C:\Users\Administrator\Desktop\lena\x64\Debug\lena.bmp
运行结果如图:
3.union的使用
#include<iostream.h>
class UN
{
   union
  {
   int ivalue;
   float fvalue;
  }
};
void main()
{
  UN a;
  a.ivalue=2;
  cout<<a.ivalue<<endl;
  a.fvalue=1.2;
  cout<<a.fvalue<<endl;
  cout<<a.ivalue<<endl;
}
union就是里面的成员共用同一个存储空间,这个存储空间的大小与union中占用空间最大的一个成员相同。
在这个例子中,union占用的空间和float类型占用的空间相同。
union中虽然可以有不同的变量,但同一时刻只能有一个值。

union的左右主要是节省内存空间,但现在内存都比较大,所以在一般的编程中很少用到,而且处理不好容易出错,建议非特殊情况不要使用。

上面程序中,第一句
cout<<a.ivalue<<endl;
显示的是2
第二句
cout<<a.fvalue<<endl;
显示的是1.2
第三句
cout<<a.ivalue<<endl;
显示的是1




                
「LLM那些事」系列第 4 篇《上下文窗口的边界》,文章连接:https://blog.csdn.net/houwenjin/article/details/163999753。 演示什么:在「预测」Sheet 的黄色格子里输入一句话(默认「来泡一杯」),四个「模型」——分别只统计最后 1 / 2 / 3 / 4 个字的 n-gram 查表——同时预测下一个字。同一个输入,看的上下文越长,候选越少、预测越确定: ┌────────────────┬──────────┬───────────────┬──────┐ │ 只看最后几个字 │ 用的前缀 │ 候选下一字数 │ 预测 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 1 个 │ 杯 │ 3(茶/子/水) │ 模糊 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 2 个 │ 一杯 │ 2(茶/水) │ 收窄 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 3 个 │ 泡一杯 │ 1(茶) │ 确定 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 4 个 │ 来泡一杯 │ 1(茶) │ 确定 │ └────────────────┴──────────┴───────────────┴──────┘
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值