
《C和指针》
konsy_dong
Java,C++,Python,linux
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
《C和指针》——在一组字符串中查找
程序中value是要查找的字符,strings指向字符串列表程序1:#include <stdio.h>#define TRUE 1#define FALSE 0int find_char(char **strings, char value){//strings指向是一个字符串列表,类似于就是二维的字符数组 char *string; //当前正在查找的字符串 while ((原创 2017-03-30 11:29:09 · 830 阅读 · 0 评论 -
《C和指针》——字符串常量实际上是个指针,你真的懂了么?
1.如果在程序中输入cout<<"xyz"+1<<endl;则输出的是什么? 因为字符串常量是个指针,这个计算就是“指针值加上1”的值 ,结果也是个指针,指向字符串中的第2个字符:y。 所以程序输出yz2.如果输入cout<<*"xyz"<<endl;则输出x3.如果输入cout<<"xyz"[2]<<endl;则输出z4.如果输入cout<<*("xyz"+4)<<endl;则输出是个未知的原创 2017-04-22 16:07:38 · 718 阅读 · 0 评论 -
《C和指针》——指针运算
指针运算的主要问题是边界问题,如果在边界值外的值没在循环判断的条件中使用,那么最后一步的位置(索引)越界是可以的,但是如果使用了,那么会存在潜在问题。 如下程序:for (vp = &values[N_VALUE - 1]; vp >= &values[0]; vp--){ *vp = 0; }原因:在数组第1个元素被清除之后,vp 的值还将减去1,而接下去的一次比较运算是原创 2017-03-30 08:57:43 · 654 阅读 · 0 评论 -
《C和指针》——将无符号整数转换为字符
其实这个程序只是为了更深刻地去理解递归,因为像什么递归方法计算Fibonacci数列是非常浪费的,效率非常地低。很多时候用递归的形式进行解译,只是因为它比非递归形式更为清晰,虽然用迭代实现往往比递归实现效率更高,但是代码的可读性稍差。下面是将无符号整数转换为字符的代码:void binaryToAscii(unsigned int value){ unsigned int quotient;原创 2017-03-31 20:37:55 · 1407 阅读 · 0 评论 -
《C和指针》——声明数组参数
把一个数组参数传递给函数,应该声明为一个指针,因为调用函数时实际传递的是一个指针,如下面两个相等的函数原型:int strlen(char *string);int strlen(char string[]);原创 2017-04-01 16:37:29 · 396 阅读 · 0 评论 -
《C和指针》——数组的奇怪形式
ap是一个指针名,array是一个数组名 1. ap[-1] 负值的下标,下标引用就是间接访问表达式,只要把它转换为那种形式并对它进行求值。ap如果指向第3个元素(就是那个下标值 为2的元素),所以使用偏移量-1就是得到它的前一个元素,也就是array[1]。 2. ap[6] 反这个下标表达式转换为与其对应的间接访问表达式形式,其实就是*(ap+6)。 3. 2[array] 表示*(2原创 2017-04-01 16:38:18 · 402 阅读 · 0 评论 -
《C和指针》——字符数组和字符串常量的区别
字符数组形式:char message1[ ]=”Hello”; 尽管看上去像是一个字符串常量,实际上它并不量,它与char message[ ]={‘H’,’e’,’l’,’l’,’o’,’\0’}一样是字符数组字符串常量形式:char *message2=”Hello”; 而message2是指向了字符串常量Hello的指针。 区别如下图所示:原创 2017-04-01 16:39:42 · 948 阅读 · 0 评论 -
《C和指针》——数组的存储顺序
数组在内存中的存储顺序,如果是下面的数组 int array[3][6] 实线方框表示第1维的3个元素,虚线用于划分第2维的6个元素。按照从左到右的顺序,上面每个元素的下标值分别是: 0,0 0,1 0,2 0,3 0,4 0,5 1,0 1,1 1,2 1,3 1,4 1,5 2,0 2,1 2,2 2,3 2,4 2,5 这个例子说明了数组元素的存储原创 2017-04-01 16:40:20 · 713 阅读 · 0 评论 -
C/C++——new一个二维数组
new一个M行N列的二维数组 new过程:int ** p;p = new int *[M];for (int i = 0; i < M; i++){ p[i] = new int[N];} delete过程:for (int i = 0; i < M; i++){ delete[] p[i];}delete[]p;原创 2017-04-01 16:41:35 · 7788 阅读 · 0 评论 -
《C和指针》——stdarg宏简介
可变参数列表是通过宏来实现的,这些宏定义于stdarg.h头文件,它是标准库的一部分。这个头文件声明了一个类型 va_list 和三个宏—— va_start、va_arg 和 va_end。我们可以声明一个类型为 va_list 的变量,与这几个宏配合使用,访问参数值。 函数声明了一个名叫 var_arg 的变量,它用于访问参数列表的未确定部分。这个变量通过调用 va_start 来初始纶。它的原创 2017-04-01 16:23:36 · 521 阅读 · 0 评论 -
C/C++——输入输出特别注意点
常用概念注意点printf(“%d”, “C++”); //输出宇符串”C++”的地址 实际上,在内存中为每一个数据流开辟一个内存缓冲区,用来存放流中的数据。当用cout和插入运算符“<<”向显示器输出数据时,先将这些数据送到程序中的输出缓冲区保存,直到缓冲区满了或遇到endl,就将缓冲区中的全部数据送到显示器显示出来。在输入时,从键盘输入的数据先放在键盘的缓冲区中,当按回车键时,键盘缓冲区中原创 2017-04-01 16:42:34 · 694 阅读 · 0 评论 -
《C和指针》——字符串操作补、字符串内存操作
1.对于 *string++!='\0',它其实等价于:*string!='\0'; string++; 2.对于 strcpy函数,如果要复制的字符串比老字符串短,由于新字符串是以NUL(即’\0’)结尾,所以老字符串最后剩余的几个字符也会被有效地删除。 如:char message[ ]=="Original message";strcpy(message,"Different");此时原创 2017-04-05 15:12:32 · 396 阅读 · 0 评论 -
《C和指针》——指向数组的指针(逐个移动和逐行的区别)
定义一个数组 int matrix[3][10]; 第一种初始化: int (*p)[10]=matrix; 第二种初始化: int *pi=&matrix[0][0];与 int *pi=matrix[0];等价第一种初始化的p指向matrix的第1行,p是一个指向拥有10个整型元素的数组的指针。当把p与一个整数相加时,该整数值首先根据10个整型值的长度进行调整,然后再执行加法。可以一行原创 2017-04-01 16:39:03 · 1219 阅读 · 0 评论 -
《C和指针》——C语言字符串操作
字符串操作strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度字符串 strlen(p) 取字符串长度 strcmp(p, p1) 比较字符串 strcasecmp忽略大小写比较字符串 strncmp(p, p1, n) 比较指定长度字符串原创 2017-03-30 13:24:45 · 899 阅读 · 0 评论 -
《C和指针》——宏中容易出现的错误
宏#define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义宏( defined macro) 。下面是宏的声明方式:#define name(parameter-list) stuff其中, parameter-list (参数列表)是二个由逗号分隔的符号列表,它们可能出现在stuff 中。参数列表的左括号必须与name 紧邻。如果两者之间有任何空白存在,参原创 2017-04-22 17:22:07 · 903 阅读 · 0 评论