首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言指针 1 引发的思考

问题背景 最近有小伙伴对于 C 语言指针的运算有点疑问:指针变量 1 之后,到底向后偏移了几个字节呢?...理解指针 指针定义 每个指针都对应一个类型。这个类型表明该指针指向的是哪一类对象。指针的类型不是机器码中的一部分,而是C语言提供的一种抽象,帮助程序员避免寻址错误。 每个指针都有一个值。...NULL 指针 C语言标准中定义了 NULL 指针,作为一种特殊的指针变量,其指向的内容为空(即不指向任何东西)。将其赋值给某个指针变量,表示该指针目前并未指向任何东西。...指针转换 通过类型转换,可以将指针从一种类型转换为另一种形式,改变的只是它的类型,值是不会改变的。 C语言中的类型转换有两种:隐式类型转换和强制类型转换。...指针运算 C语言指针运算有两种形式。 第一种:指针 ± 整数 这种计算出来的值,会根据该指针指向的某种数据类型的大小进行伸缩。

1.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

C语言:深入理解指针(2)

我发现在x64环境下sz2等于2,而在x86环境下sz2=1,这说明传入的arr虽然是首元素的地址,其本质是一个指针,大小是一个指针的大小,而指针取决于操作平台,x64是8个字节,x86是4个字节。      ...sizeof 运算符的返回值,C 语言只规定是无符号整数,并没有规定具体的类型,而是留给系统自己去决定, sizeof 到底返回什么类型。...C 语⾔提供了⼀个解决⽅法,创造了⼀个类型别名 size_t ,⽤来统⼀表⽰ sizeof 的返回值类型。...7.2 strlen      strlen是C语言的库函数,头文件是,功能是求字符串的长度。        ...{ char arr1[3] = { 'a','b','c' }; char arr2[] = "abc"; char arr3[20] = "abcdef"; char arr4[6] = "

10110

C语言进阶指针2)(超详细)

三、一维数组传参的本质 数组传参时,我们常能看到两种写法, 1.void Print(int*arr); 2.void Print(int arr[10]); 其实对于这两种写法,传过去的都是指针变量...这次我们这是先认识一下二级指针,以后我们会对二级指针有一个更加深入的讲解。 当然还有三级指针。 五、指针数组模拟二维数组 指针数组是指针还是数组呢? 整形数组-存放整形的数组。...//指针数组模拟二维数组 int main() { int arr1[] = { 1,2,3,4,5 }; int arr2[] = { 2,3,4,5,6 }; int arr3[] = { 3,4,5,6,7...}; int* arr[3] = { arr1,arr2,arr3 }; int i = 0; int j = 0; for (i = 0; i < 3; i++) { for (j =...j++) { printf("%d ", arr[i][j]); } printf("\n"); } return 0; } 1.arr的第一个数组里放arr1的首元素地址 2.

5810

C语言学习——指针精华(2

C++....= '\0'; i++) printf("%c", a[i]); printf("\n"); return 0; } 结果如下: 用指针变量指向的格式字符串代替printf中的格式字符串...本身占4字节; (2)函数指针、数组指针、普通指针之间并没有本质区别,区别在于指针指向的内容是什么; (3)函数的实质是一段代码,这一段代码在内存中是连续分布的(一个函数的大括号括起来的所有语句将来编译出来生成的可执行程序是连续的...),所以对于函数来说很关键的就是函数中的第一句代码的地址,这个地址就是所谓的函数地址,在C语言中用函数名这个符号来表示; (4)结合函数的实质,函数指针其实就是一个普通变量,这个普通变量的类型是函数指针变量类型...- 1]; } 结果如下: 【工程案例】 #include int main() { int x = 89; int y = 92; int *p[2]

29220

C语言指针(野指针)

2:如何规避野指针 1.1:指针变量的初始化 2.2:指针越界访问 3.3:指针指向的空间如果我们还回去的话,就把指针指针置为NULL  4.4:指针使用之前检查有效性 1:什么是野指针?...指针越界也会导致野指针问题,这里解释下:就是当你指针指向的范围超过数组名范围时,那么那个指针就是野指针了。...2:如何规避野指针 1.1:指针变量的初始化 int a = 10; int* pa = &a; //指针变量的初始化 指针常见错误 引用未初始化的指针变量 试图引用未初始化的指针变量是初学者最容易犯的错误...3.3:指针指向的空间如果我们还回去的话,就把指针指针置为NULL NULL——空指针,用来初始化指针或者给指针赋值,可以转到定义看看 #define NULL    ((void *)0) 说的简单一点就是...空指针不应与未初始化的指针混淆:保证空指针与指向有效对象的任何指针进行比较。但是,根据语言和实现,未初始化的指针可能没有任何此类保证。它可能与其他有效指针相等; 或者它可能比较等于空指针

2.6K20

C语言——指针

指针c语言中的一个重要概念,也是C语言的一个重要的特色,正确而灵活地运用它,可以使程序简洁,紧凑,高效,每一个学习和使用c语言的人,都应当深入了解地学习和掌握指针,可以说,不掌握指针就是没有掌握C的精华也可以说...指针C语言的灵魂(doge) 由于通过地址能找到所需的变量单元,可以说,地址指向变量单元,打个比方,一个房间的门口挂了一个房间号2008,这个2008就是房间的地址,或者说,2008"指向"...p2; //定义指向整型数据的指针变量p1,p2; p1 = &a; //把变量a的地址赋给指针变量p1 p2 = &b; //把变量a的地址赋给指针变量...野指针 概念:野指针就是指针指向的位置是不可知的,(随机性的丶不正确的丶没有明确限制的) 野指针成因 1.指针未初始化 2.指针越界访问  如何避免野指针 1.指针初始化 2.小心指针越界...3.指针指向空间释放即使置NULL 4.避免返回局部变量的地址 5.指针使用之前检查有效性 指针运算 小时候我们就知道1+1等于几 那我问你如果是指针1的话 的是那个数字吗 ?

2.2K20

C语言指针

二、指针的定义 三、指针的初始化 四、指针运算符 五、指针的用途举例 六、关于指针的疑问 指针C语言中非常重要的数据类型,如果你说C语言中除了指针,其他你都学得很好,那你干脆说没学过C语言。...1.我们已经知道,"直接引用"是直接通过变量名来读写变量 2.C语言中还有一种"间接引用"的方式(以变量a为例):首先将变量a的地址存放在另一个变量中,比如存放在变量b中,然后通过变量b来间接引用变量a...* 看下面的代码,利用指针p读取变量c的值 1 int i = 2; 2 char c = 1; 3 4 // 定义一个指向char类型的指针 5 char *p = &c; 6 7 // 取出 8...这个要根据内存来分析 根据变量的定义顺序,这些变量在内存中大致如下图排布: 其中,指针变量p和int类型变量i各占2个字节,char类型的c占一个字节,p指向c,因此p值就是c的地址 ?...当利用*p来获取变量c的值时,由于指针p知道变量c是char类型的,所以会从ffc3这个地址开始读取1个字节的数据:0000 0001,转为10进制就是1 2> 后来,我们用int *p指向变量c

3.3K60

C - 指针C语言指针的总结

C语言指针的总结 1. 变量 不同类型的变量在内存中占据不同的字节空间。 内存中存储数据的最小基本单位是字节,每一个字节都有一个内存地址,这个地址是一个十六进制的数。...什么是指针:变量的地址叫做指针指针就是地址,地址就是指针。 下面通过一张图可以更直观的理解内存中的地址 ? 内存中的地址演示图 2. 指针 指针C语言的灵魂。指针变量占据8个字节。...*p = 100; 表示将100赋值给p指针指向的变量,也就是num变量 使用指针变量的时候注意点 int* p1 ,p2, p3 ; 此时p1是int *指针,而p2,p3是int类型数据 如果希望全部都是指针需要...",num1); printf("num2 = %d",num2); return 0; } 指针为什么要分类型 指针变量既然是一个变量就要在内存中占用字节空间 指针变量在内存中占据多少字节数...指针与整数的加减法 指针可以和整数进行加减运算,指针+1并不是在指针地址的基础之上一个字节的地址,而是在这个指针地址的基础之上一个单位变量占用的字节数,例如:如果指针类型是int * 则+1代表

4.1K81

C语言_初识C语言指针

为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址 编号 = 地址 = 指针 指针变量 = 变量 = 存放地址的变量 ---- 一、指针 … 一个内存单元多大比较合适...在计算机上,有地址线,物理的电线,有高低电平的信号,转换数字信号:1/0 32位机器,上面有32根地址线 2的32次方个字节的空间 - - - 4,294,967,296 Byte — 4GB --...-- 通过pa里存放的a的地址找到a ---- 三、指针变量的大小 指针变量是用来存放地址的 32位机器上:地址是32个二进制位,这个地址要存储的话要4个字节,所以在32位机器上,指针变量的大小是...64位机器上:地址是64个二进制位,这个地址要存储的话要8个字节,所以在64位机器上,指针变量的大小是8个字节。

15230

C语言指针

学习 C 语言指针既简单又有趣。通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C 程序员,学习指针是很有必要的。...("var1 变量的地址:%p\n", &var1 ); printf("var2 变量的地址:%p\n", &var2 ); return0; } 当上面的代码被编译和执行时,...指针变量就是一种变量, 和其他种类的变量类似, 但指针和其他变量又有区别. 首先C语言作为一种类型语言, 每个变量都会有几个属性. 变量名称. 变量类型. 变量的值....Address stored in ip variable: bffd8b3c Value of *ip variable:20 类型 对于C语言来说, 搞清楚变量的类型相当重要, 涉及到指针的时候就更加重要...整个来说: next是一个指针, 指向一个函数, 函数的返回值也是一个指针, 指向一个类型为char的常量指针. C语言为类型语言, 即每个变量都有类型.

2.6K20

C语言重点突破(2指针(一)

前言 指针对于C语言非常重要,因为它是C语言的重要特性之一。 指针可以帮助程序员更高效地处理内存,允许程序访问和修改内存中的数据。...在C语言中,变量存储在内存中的某个位置上,变量的地址就是这个位置的地址,指针就是表示存储在某个内存位置上的变量地址的变量。 指针可以用于动态分配内存,使程序更加灵活。...因此,熟练掌握指针的用法是C语言程序员必备的基本技能,虽然非常重要,但对于指针的运用以及理解来说,在学习C语言的初期可是让不少程序员犯了难。 新手学习指针的难点有以下几个方面: 1....理解指针与数组的关系:在C语言中,数组名本身就是一个指针,可以看作是数组第一个元素的地址。初学者需要理解指针与数组之间的关系,以便更好地理解和使用数组。 3....在C++和类似的语言中,解引用操作符为 `*`,其作用是将指针变量前面加上 `*` 后,可以访问该指针所指向的内存地址中存储的值。

11110

C语言重点突破(2指针(二)

C/C++会把常量字符串存储到单独的一个内存区域,当几个指针。指向同一个字符串的时候,他们实际会指向同一块内存。但是用相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块。...所以str1和str2不同,str3和str4不同。 2. 数组指针 数组指针,这是一个新的概念,那么它到底是数组还是指针呢?...int *p1[10]; int (*p2)[10]; //p1, p2分别是什么?...很明显,p1应该是一个指针数组,这里要涉及到操作符的优先级问题,而[]的优先级要高于*号的 而p2加了一个括号,保证*与p2相结合为一个指针,定义为指针变量,然后指着指向的是一个大小为10个整型的数组...指针数组 上一章讲过,指针数组就是一个存放指针变量的数组,不同的类型可以存放不同的指针 int* arr1[10]; //整形指针的数组 char *arr2[4]; //一级字符指针的数组 char

9510

C语言重点突破(2指针(三)

简易实现计算器 相信各位在学习C语言的初期都尝试过实现一个加减乘除的简易计算器,但在学习完函数指针后,我们可以更加简单和高效的实现。...关于回调函数的例子,最典型的是qsort函数 qsort函数是C语言标准库中的一个函数,用于对数组进行快速排序。使用它时,需要传入四个参数: void* base:是需要排序数组的起始地址。...下面是冒泡排序的C语言实现代码: void bubble_sort(int arr[], int len) {     int temp;     for (int i = 0; i < len - 1...再来,我们介绍一下void* 的作用 void* 是C语言中的一个指针类型,通常称之为“无类型指针”。它可以指向任意类型的数据,因为所有的类型都可以通过指针进行访问和操作。...为了访问指针所指的数据,我们要先将 void* 指针进行类型转换,然后才能访问其所指向的数据。 在C语言中,void* 经常用于函数参数和返回值的类型。

6910

C语言 | 指向指针指针

“要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人…万中无一” ——包租婆 这道理放在C语言学习上也一并受用。...在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历的是日积月累的学习。 那么如何学习呢?当然是每天都练习一道C语言题目!! ? 作者 闫小林 白天搬砖,晚上做梦。...例82:C语言用指向指针指针的方法对n个整数排序并输出;要求将排序单独写成一个函数;n个整数在主函数中输入,最后在主函数中输出。...解题思路:读者看着道题的时候,首先要观察一下有什么规律,然后指向指针指针在上一道练习题中已经有了铺垫,读者可以联系上一道题去熟练使用指向指针指针。...C语言源代码演示: #include//头文件 int main()//主函数 { void sort(int **point,int number); //sort排序函数声明

3K32

C语言指针(三)函数指针

函数指针 在我们定义函数的时候,编译器也会在内存空间给函数开辟一个内存,而该内存的首地址就是函数的内存地址,而函数指针就是指向该内存地址的。...3.1 函数 众所周知,C语言是面向过程的语言,或者称函数式编程。 而在C语言中,函数也确实起了很大的作用,在C语言的学习中,你见过最多的可能就是main函数,同时也是你第一个见得函数。...; return 是函数结束的关键字,返回值为0表示程序正确运行,为其他表示有其他异常 切记main函数不要void main(){},这个真的很重要 ❞ 3.2 指向函数的指针 见名知意,这个东西也是一个指针...> /* 定义一个两数求和函数 返回两个数的和的结果 */ int sum(int num1, int num2) { int ans = num1 + num2; return...funP = sum; // 将函数sum的地址给funP int ans = funP(1, 2); // 使用指针使用函数 printf("%d", ans

2K00

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券