c语言基础(是时候补补c的基础了)
看数据结构裢栈的时候写了这么一段代码
#include<stdio.h>
#include<stdlib.h>
struct linkstack
{
int data;
struct linkstack *next;
};
int initstack(linkstack * S)
{
S = (linkstack *)malloc(sizeof(linkstack));
if(S == NULL) return 0;
S->next = NULL;
return 1;
}
int main(int argc,char **argv)
{
linkstack S;
if(initstack(&S))
printf("initstack success!!!\n");
return 0;
}
结果编译后就出现了这些错误
@-laptop:~/makeprog/stack$ gcc -g -o linkstack main.c
main.c:11: error: expected ‘)’ before ‘*’ token
main.c: In function ‘main’:
main.c:22: error: ‘linkstack’ undeclared (first use in this function)
main.c:22: error: (Each undeclared identifier is reported only once
main.c:22: error: for each function it appears in.)
main.c:22: error: expected ‘;’ before ‘S’
main.c:23: error: ‘S’ undeclared (first use in this function)
想了一下估计是这个结构体定义的问题,就改成这样
typedef struct node
{
int data;
struct linkstack *next;
}linkstack;
编译通过
然后找一下原因
第一种方式定义了一个全局
的结构体,然后在main()函数中用它来定义一个变量,所以不可以。第二种方式用了typedef,查查它的用法
typedef
为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct
等)。
在编程中使用typedef
目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
但是还是不能分析出来到底什么原因,问问群里的朋友
相关文档:
Boss说,要看OpenGL,看了快一个月,总算出了个像样的东西,用C写了个3D迷宫,
虽然只有350行
代码,不过边学边写,足足写了一周时间,还是小有成就感的,活活活!
&n ......
学了C然后C++,然后MFC/Windows,然后是C#,其中数据类型很多,由基本类型衍生的typedef类型也N多。熟知基本数据类型是我们正确表达实际问题中各种数据的前提,因此我分类总结了一下C/C++/Windows /C#基本数据类型,以便日后查阅。
ANSI C/C++基本数据类型:
Type
Size
......
当要交换两个数的值时,通常的做法是定义一个临时变量,然后再进行交换。那么能不能不用临时变量而交换两个数的值呢?可以的!C语言提供的异或运算就可以实现这样的操作。
异或运算符^也称XOR运算符,它的规则是若参加运算的两个二进位同号,则结果为0(假);异号为1(真)。即0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 0 = 1, ......
#include <windows.h>
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd )
{
OPENFILENAME ofn;
//在内存中开辟一块空间,存放用户选取的文件名
char szFile[MAX_PATH];//MAX_PATH ......
//#include "stdafx.h"
/*
描述:纯c模拟类,纯c编写c++类,纯c实现c++类的简单范例,结构模拟类,struct 编写class.
c编写类是实现纯c编写com组件的基础。
*/
#include <stdio.h>
typedef struct _Vtbl
{
void (*AddRef)(struct CObject* obj,int);//所有的函数的第一个参数类似class的隐匿的 ......