对指针的概念清晰的话,做这种题只要耐心就行,然而看这种题就烦(被同学吐槽为谭浩强的阴影……草泥马这种C风格题有意义吗?出题人脑子被门夹了?而且C++11都不支持字面值字符串直接转换成char*了.好吧,就算要大骂一通出题人,该做还是做.) 分析三行初始化代码: 1.c[0]指向"HELLO",c[1]指向"NEW",c[2]指向"WORLD",c[3]指向"SAYHI". cp[0]=c+3,即cp[0]=&c[3],…
指针是什么? 一个 变量的地址称为该变量的"指针"[将地址形象化的称为“指针”].(指针是什么百度百科) 注意区分储存单元的地址和内容这两个概念的区别. 直接访问:直接按变量名进行访问,直接通过变量名访问变量内容 间接访问:将变量a的地址存放到另一个变量b中,然后通过变量b找到变量a的地址,从而访问变量a的内容. 指针变量 一个变量a专门用来存放另一个变量b的地址(即指针),则称变量a为指针变量. 指针变量就是地址变量,用来存放地址,指针变量的值就是地址(即指针). 注意区分指针与指针…
指针值加1就是将指针值加上sizeof(指针所指变量的类型) 1+1=2,那么指针加1是加上了1这个数字吗?试一下,在代码中定义了char数组,char也是整数,数组名是ac,ac中有10个元素,0-9,然后做了一个char *p=ac,定义了*p的一个指针,p指向了ac数组的第一个单元.然后分别输出p和p+1的值,结果是差了1: #include <stdio.h> int main(void){ ,,,,,,,,,}; char *p = ac; printf("p =%p\n&…
(7)指针运算 在前几篇文章中,我们已经见过指针运算的使用场景,并多次使用指针运算来进行验证. 这里我们来特别地总结下.指针运算的本质含义. 在c语言中.如果p.pa.pb都是某种类型的指针,这种运算被称为指针运算(算术运算): ,前提:pa和pb类型同样. 其本质是 1.. 2..得到的是逻辑存储单元数.而不是简单的物理字节数. 代码验证 int main(void) { int array[] = {1, 2, 3}; int *pa = array; int *pb = array + 3…
该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 指针运算有很多种,主要有指针的声明*.指针的解引*.指针指向(*).或->.指针+.指针-.指针==.指针!=.指针>.指针>=.指针<.指针<=.指针转换(数据类型). 通过代码: #include <stdio.h> int main(int argc, char **argv) { char charVar; short shortVar; in…
uintptr 和 unsafe普及 uintptr 在Go的源码中uintptr的定义如下: /* uintptr is an integer type that is large enough to hold the bit pattern of any pointer. 从英文注释可以看出 uintptr是一个整形,它的大小能够容纳任何指针的位模式,它是无符号的,最大值为:18446744073709551615,怎么来的,int64最大值 * 2 +1 */ type uintptr u…
二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有"缝隙".以下面的二维数组 nums 为例: 从概念上理解,nums 的分布像一个矩阵,但在内存中,a 的分布是一维线性的,整个数组占用一块连续的内存: 1 int nums[2][3] = { 10,20,30,40,50,60 }; 2 //以上定义与下边相同 3 int nums[2][3] = { {10,20,30}, {40,50,60} }; 在几乎所有的程序语言中,二维数组都是按行排…
按照作者的说法,作为应届毕业生的我来说,如果能写出初级程序员的参考代码来解决面试题14就可认为过关了... 参考代码如下: void ReorderOddEven_1(int *pData, unsigned int length) { ) return; int *pBegin = pData; ; while(pBegin < pEnd) { // 向后移动pBegin,直到它指向偶数 ) pBegin ++; // 向前移动pEnd,直到它指向奇数 ) pEnd --; if(pBegin…
到现在为止,看过的书+代码有一定量了,并且也参加了个比赛,给自己的总体感觉:编程需要的是灵活的头脑,书里的东西只是讲个规则.思想,其实际实现可以千差万别!   潜在的规则+灵活的思维 = 程序! 在做面试题5时,发现Utilities文件夹下的内容太好了,基本上是那些数据结构的实现:链表.二叉树.树等(缺个图),准备通过学习这些代码来深入理解各个数据结构及其接口/成员函数. 拿该题来说,解决单链表!!! 题目:逆序打印单链表 一.自己写单链表类及其操作 花了一下午时间,无语了... 1.List…
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的头结点 链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; } 其实反转链表主要是链表指针的操作,一定要很清楚才行. 其实在面试题5,从尾到头打印链表的第一种方式已经实现了 这种方式: 这里在梳理下反转链表的过程: 比如链表:1->2->3->4->5->6 1.定义三个指针p1,p2,p3 2.p1指向1,p2指向2,p3指向3 3.p2-&g…