C深度解剖问题代码分析笔记2
<!--
@page { margin: 0.79in }
P { margin-bottom: 0.08in }
-->
是C深度解剖 P47的一系列关于define和typedef的用法:
/****以下是
#define
a int[10]
的各种用法,都报错
***
a[10]
a[10];
//**************
a[10]
a;
//**************
int
a[10];
//**************
int
a;
//**************
a
b[10];
//**************
a
b;
//**************
a*
b[10];
//**************
a*
b;
*********************************************/
/******以下是
typedef
int a[10]
;
的用法
*****************
//typedef
int a[10]定义了一种包含
10个
int的数组的类型
a[10]
a[10];//报错
,没有标识符
//******************************************
a[10]
a; //报错
,没有标识符
//******************************************
int
a[10]; //如常
,a[10]只是个普通的数组
//******************************************
int a;
//如常
,a只是个普通的变量
//******************************************
a
b[10];
//sizeof(a)为
40
//b[10] 是个二维数组,包含了
10*10个
int
//b[1][1]=2;//可以如常使用
//******************************************
a
b;
//b是个线性数组
//******************************************
a*
b;
//b
是个
a型指针
,可以如此操作:
b=malloc(sizeof(a));
int i;
for(i=0;i<10;i++)
{
(*b)[i]=i;
}
for(i=0;i<10;i++)
{
printf("%d
",*(*b+i)); //与
(*b)[i]一样
}
可能有人会认为这里的
a*
b; 是声明一个指针数组,类似于
int
*p[10]。
然而两者有本质的不同,简单来讲,前者是一个
40字节的框子,
b+1就会向前移
40字节框住下
40个字节;后者是个
4字节的框子,
p+1只会前移
4字节框住下
4个字节。
//******************************************
a*
b[10];
//b[10]是
10个
a型数据构成的数组,也就是说有
100个
int
int
i,j;
for(i=0;i<10;i++)
{
b[i]=(a*)malloc(sizeof(a));
for(j=1;j<11;j++)
{
(*(b[i]))[j]=i*10+j;
}
printf("\n");
}
for(i=0;
相关文档:
一般在调试打印Debug信息的时候, 需要可变参数的宏. 从C99开始可以使编译器标准支持可变参数宏(variadic macros), 另外GCC也支持可变参数宏, 但是两种在细节上可能存在区别.
1. __VA_ARGS__
__VA_ARGS__ 将 "..." 传递给宏 . 如
......
学习C语言时,用字符串的函数例如stpcpy()、strcat()、strcmp()等,要包含头文件string.h
学习C++后,C++有字符串的标准类string,string类也有很多方法,用string类时要用到string.h头文件。
我现在看vc的书上也有CString类,这个要包含什么,怎么用?
我现在很迷惑,这两个 string.h有什么区别。是怎么回事
且看 ......
网上看到的这篇关于Linux下C语言嵌入汇编的文章写的非常全,转载过来。
Using Assembly Language in Linux.
Intel和AT&T汇编语法差异:
1。前缀:
Intel汇编寄存器和立即数无需前缀。后者寄存器前缀为%,立即数前缀为$。
eg:
Intex Syntax
mov eax,1
mov ebx,0f ......
定义按值传递和按引用传递这两个术语是重要的。
按值传递意味着当将一个参数传递给一个函数时,函数接收的是参数的一个副本。因此,如 果函数修改了该参数,仅改变副本,而原始值保持不变。按引用传递意味着当将一个参数传递给一个函数时,函数接收的是参数的内存地址,而不是参数的副本。因 此,如果函数修改了该参数,调 ......
这个本来以前也写过的,今天无聊复习下 再写一遍。简单的一塌糊涂,写的不咋地大家见谅哦!有空再加强 嘿嘿!
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <time.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h ......