c 和 指针读书笔记(1)

1.字符串常量:出现在表达式中,其值是一个指针

"abc" + 1; //b

2.回掉函数:就是把函数的作为参数传入父函数,函数本身就是一个地址,传址肯定没问题。至于父函数是想用函数的返回值还是调用函数,好像没多大关系,这个确实好像没什么好说的,就是一个传参。

void main()
{
    printf("into main for call func\n");
    int itmp = 1;
    func2(&itmp, (int)(*func)(&itmp));
}

int func( int* i){
    printf("into func 1\n");
    (*i)++;
    return *i;
}

int func2(int *i, int (*f)(int* i)){
    printf("into func 2\n");
    printf("i= %d \n", *i);

    return 0;

}

[[email protected] bin]$ ./ctest ./ctest
into main for call func
into func 1
into func 2
i= 2

时间: 2024-11-10 13:53:08

c 和 指针读书笔记(1)的相关文章

<C和指针---读书笔记10>

傻傻的没弄清,字符数组和 字符串 . 第一点:  编译器遇到 双引号" "的时候,主要有一下集中情况: char str[] = " abc"  :  不指定长度. char str[2] = "abc" :  长度过短. char str[3] = "abc" : 长度恰好, char str[4] = "abc" :   长度恰好 多出1 char str[6] = "abc"  :

<C和指针---读书笔记11>

对于构成字符串的,string.h封装了许多现成的函数以供使用. 字符串,不论是常量字符串还是借用数组尾缀'\0'.  这个strings.h里面的函数都是针对的字符串. 即以'\0'做为截至. 如果你不幸的对 char数组操作,可能得到的结果并不是你想要的结果. strlen函数  unsigned int  strlen (char const *string) 参数列表: 是一个指针或者数组名即可. 返回值:  返回一个无符号数.  如果两个返回值进行比较大小,可以使用  strlen(

<C和指针---读书笔记9>

二维数组 声明和初始化: Type  数组名[m][n] : 声明了一个二维数组. Int  matrix[3][4] = { { 00, 01, 02, 03} , { 10, 11, 12, 13} , { 20, 21, 22, 23} } 视角分析: 二维数组可以看成一个数组:只不过这个数组由复杂元素组成. Int   matrix[3][4] = {?, ?, ?} ,复杂元素?是一个数组. 存储方式: 编译器遇到二维数组的声明时,会为其分配一段空间,顺序如图. 并记录下来, matr

C和指针——读书笔记(二)

最近频繁地用到数组,又看了<C和指针>数组这一章,所以决定写一些东西,分享一下. 提到数组,很多人都会提到指针.在C语言中,数组名是一个指针常量(意味着你不能修改此常量的值).为什么呢?我们想一下,数组名,是数组首元素的地址,也就是内存中数组的起始位置.如果修改这个指针常量,唯一可行的就是把整个数组移动到内存中的其他位置.但是在程序完成连接后,内存中数组的位置已经固定了,所以再移动就为时已晚了. 一.一维数组 void func1(int* a) { printf("一维数组分析\n

&lt;C和指针---读书笔记13&gt;

结构变量用作函数参数 结构变量做为一种变量类型,完全可以用于函数参数.如果直接把 结构名做为参数,那么根据传值特性,函数调用时, 会为其开辟一部分内存单元,并完成copy值的传递.如果结构变量很庞大,就会很浪费. 还有一种方式,函数参数是: 一个指向struct的指针.这样在函数体内,我们可以使用 px->成员来进行访问. 此时实参--->形参只需要传递一个指针变量,大幅缩小.但我们知道,传递指针有一个坏处,就是函数体内 若修改成员内容,就会真实的反馈到 实参中.需要特别注意. 实参和形参 实

&lt;C和指针---读书笔记12&gt;

Struct. 有时候我们希望把归属于一类的信息放在一起,便于查看.如一个员工的姓名.编号.工资.出勤.它又 字符串.int.float.数组等 构成.C提供了struct,使他们聚合在一起,便于我们访问. 结构定义 很显然,结构也是一个变量,它有自己的变量名,类型是struct;除此之外,我们还要说明 它由什么构成. (1)  struct  { member list }  x; 这个跟 int x一样,声明一个int型变量x.此处,声明一个 由member_list 组合构成的struct

&lt;C和指针---读书笔记8&gt;

首先讨论一维数组. int b[10] 声明了一个整数型数组,数组名称为b,它由10个int型数据组成,依次为b[0] .b[1].... b[9] 那么b是什么类型? 从我们直观的分析来看,b是一整个数组. 在C中,几乎所有情况,b---数组名,是一个指针常量,指向"自己的元素类型".且是常数指针,永远指向第一个数组元素. 比如,此处b是一个指针,一个指向int型的指针.且值大小为 &b[0]. 个别情况:sizeof(数组名) =  元素个数 .       &数组

&lt;C和指针---读书笔记6&gt;

指针 指针是一种变量,和int.float.char一样,是一种基本的变量.只不过它比较抽象一些. 我们知道在C语言中,声明一个变量a.b,编译器会为其分配一个物理地址 addr_1 .addr_2,在之后的C语言中,a =1操作,是把数值1存入该 addr_1,就等价于a值变为1.b = b+1 ,是先读取 addr_2的内容,加1操作后,再写会 addr_2内. 可以这样理解: 变量出现在 =右侧,一般是 读 addr_x的内容,变量是左值,一般是 存入 addr_x. 在C语言中变量实质上

&lt;C和指针---读书笔记15&gt;

预处理 预处理这个过程,发生在编译代码之前,编译器先进行预热.完成一些替代工作. 我们最先接触的肯定是 #defien True 1这样的. #define name stuff 在程序中,出现name字样,在预处理阶段都会被替换成为 stuff.就像碰到True,都会替换成1. 书写技巧: (1)  #define  Debug_msg    printf ("File : %s ,Line : %d ,x= %d" \ , __FILE__,__LINE__,x) \+换行符 =