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

初识C语言——初识指针(什么是内存,什么是指针,指针变量怎么用,指针的大小)

所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。 为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。...("%c\n", ch); return 0; } 3.指针变量的大小 思考一个问题,整型变量的大小是4个字节,char类型1个字节,double8个字节,那么指针变量的大小是多少?...不同类型的指针变量大小是不是也不一样呢?...为什么不同类型的指针变量大小是一样的呢?又为什么是4个字节呢? 原因是: 指针是用来存放地址的,所以指针变量的大小取决于地址的大小,而在同一平台上地址的大小是固定不变的。...我们来验证一下: 在32位平台上: 4个字节 64位平台上: 8个字节 所以,我们得出结论: 指针变量的大小在同一平台是是固定的: 指针大小在32位平台是4个字节,64位平台是8

26510

指针的内存大小

而在x84架构中,我们的cpu每一次提供一条不可分割的32位指令传递给cpu,这样说明了64位系统为什么可以运行32位程序。 2.指针的内存大小 了解上述内容后我们来看指针的内存大小。...首先,指针就是一个变量,用来存储地址信息。所以无论什么类型的指针,其内存大小都是相同的,都是数据的存储空间长度。...2.1不同系统环境的指针内存大小 32位----32bit----4Byte 64位----64bit----8Byte 原理是因为不同系统中cpu能够一次性提取的位不同,所以地址长度也不同。...现在我们换到x64系统来看一下指针的内存大小 #define _CRT_SECURE_NO_WARNINGS #include int main() { int a = 0;...总结 指针的内存大小就是变量的地址长度。在不同系统环境中其地址长度也不同,所以指针内存的大小通常为4字节(32位)或者8字节(64位)。

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

    【C语言】const修饰指针的不同作用

    p,并指向n的地址,通过解引用操作符对n处地址的值进行修改,运行后可以发现可以成功运行,并且成功修改了n的值,结果如下 我们对变量n用const修饰目的就是为了不让n的值改变,如果p拿到...请看下一个章节进行讲述用const修饰指针变量来进行实现该问题。 const修饰指针变量 下面通过四个例子对比来得到关于const修饰指针变量的不同方式所得到的不同结论。...在const在*左边时,意思是指针p指向的n是一个用const修饰的变量,所以通过*p无法对n进行修改。...结论 • const如果放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。但是指针变量本⾝的内容可变。...• const如果放在*的右边,修饰的是指针变量本⾝,保证了指针变量的内容(指针指向)不能修改,但是指针指向的内容,可以通过指针改变

    10810

    【C 语言】二级指针案例 ( 字符串切割 | 返回 自定义二级指针 作为结果 | 每个 一级指针 指向不同大小内存 | 精准分配每个 一级指针 指向的内存大小 )

    文章目录 一、二级指针案例 ( 返回自定义二级指针 | 精准控制内存大小 ) 二、完整代码示例 一、二级指针案例 ( 返回自定义二级指针 | 精准控制内存大小 ) ---- 博客 【C 语言】二级指针案例...= NULL) { // 将 p1 指针 与 p2 指针之间的 字符拷贝出来 // 这就是分割后的字符串 if (...= NULL) { // 将 p1 指针 与 p2 指针之间的 字符拷贝出来 // 这就是分割后的字符串 if (...p1 - p2 > 0) { // 计算精准控制的 一级指针 指向的内存大小 int len = p1 - p2...p1 - p2 > 0) { // 计算精准控制的 一级指针 指向的内存大小 int len = p1 - p2

    1.9K10

    C语言 | 用指向指针的指针对n个整数排序

    例82:C语言用指向指针的指针的方法对n个整数排序并输出;要求将排序单独写成一个函数;n个整数在主函数中输入,最后在主函数中输出。...解题思路:读者看着道题的时候,首先要观察一下有什么规律,然后指向指针的指针在上一道练习题中已经有了铺垫,读者可以联系上一道题去熟练使用指向指针的指针。...*point,int number); //sort排序函数声明    int i,number,data[20],**point,*pstr[20]; //定义变量    printf("输入要排序的个数...:");//提示语句    scanf("%d",&number);//键盘输入    for(i=0;i<number;i++)   {     pstr[i]=&data[i]; //将第i个整数的地址赋予指针数组...我们常说“学而不思则罔”,和学习编程知识一样,我们只有在学习的同时加以总结与思考,才能对编程有更系统和深入地了解,学到的知识才真正能为自己所用。

    1.5K22

    认识 size_t 和指针类型的大小

    它是一个与机器相关的 unsigned 整型类型,其大小足以保证存储内存中对象的大小。...size_t 由来:在 C++ 中,设计 size_t 是为了适应多个平台的 ,size_t 的引入增强了程序在不同平台上的可移植性。...总结:size_t的大小并非像很多网上描述的那样,其大小是由系统的位数决定的。size_t的大小是由你生成的程序类型决定的,只是生成的程序类型与系统的类型有一定关系。...然而我们编译的程序一般是32bits的,因此size_t的大小也就变成了4个字节。 2.指针的大小 指针用于存放地址,其大小有机器字长决定,如果是32位机器就是4字节的,如果是64位机器就是8字节的。...正如上面的讨论,如果编译生成的程序不是64位的,那么指针的大小依然是4个字节。

    3.6K20

    【C 语言】字符串 一级指针 内存模型 ( 指定大小字符数组 | 未指定大小字符数组 | 指向常量字符串的指针 | 指向堆内存的指针 )

    文章目录 一、字符串 一级指针 内存模型 1、指定大小字符数组 2、未指定大小字符数组 3、指向常量字符串的指针 4、指向堆内存的指针 一、字符串 一级指针 内存模型 ---- #include <stdio.h...\0 字符 ; // 栈内存数组 指定大小 char array[5] = "abc"; 2、未指定大小字符数组 在 栈内存 中 , 声明 不指定大小的 字符数组 , 初始化 “123...” 字符串 ; 在 全局区 的 常量区 中 , 存放 “123” 常量字符串 ; 在 栈区 的 array2 数组中 , 存放 “123” 字符串内容 , 注意最后的 \0 字符 , 该数组大小 4...字节 ; // 栈内存数组 不指定大小 char array2[] = "123"; 3、指向常量字符串的指针 在 栈内存 中 , 定义 局部变量 指针 p , 没有为该指针分配内存...、指向堆内存的指针 先在 堆内存 中 , 分配 5 字节内存 ; 然后 在 全局区 的常量区 中 , 定义 字符串常量 “456” ; 最后 将 字符串常量 “456” 拷贝到 堆内存 分配的 内存中

    2.4K20

    C语言 | 用指向指针的指针对5个字符串排序输出

    例81:C语言实现用指向指针的指针的方法对5个字符串排序并输出。...解题思路:读者看着道题的时候,首先要知道什么时指针,指向指针的指针应该怎么用,一般在开发中不这样用,读者要看明白,这个很锻炼思维的。...C语言源代码演示: #include//头文件  #include  #define LINEMAX 20 //定义字符串的最大长度  int main() {   ...  char **point,*pstr[5],str[5][LINEMAX];//定义变量    for(i=0;i<5;i++)   {     pstr[i]=str[i]; //将第i个字符串的首地址赋予指针数组...return 0;//主函数返回值为0  } void sort(char **point)//冒泡排序算法实现  {      int i,j;//定义整型变量    char *temp;//定义字符指针变量

    1.5K53

    替换后的最长重复字符(滑动窗口)(双指针)

    题目 给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。...示例 1: 输入:s = "ABAB", k = 2 输出:4 解释:用两个'A'替换为两个'B',反之亦然。...示例 2: 输入:s = "AABABBA", k = 1 输出:4 解释: 将中间的一个'A'替换为'B',字符串变为 "AABBBBA"。 子串 "BBBB" 有最长重复字母, 答案为 4。...根据上面思路可以确定几个变量 n 记录第一次不一样元素指针位置 m 某字符串长度 p 记录k t 记录某字符串开始字符 jud 判断是否记录(记录第一个不一样字符的时候判断条件应该为if (s[i] !...int k) { if (s.size() == 0) { return 0; } int n = 0; //记录第一次不一样元素指针位置

    39810

    K 个不同整数的子数组(双指针)

    题目 给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定独立的子数组为好子数组。...(例如,[1,2,3,1,2] 中有 3 个不同的整数:1,2,以及 3。) 返回 A 中好子数组的数目。...示例 1: 输入:A = [1,2,1,2,3], K = 2 输出:7 解释:恰好由 2 个不同整数组成的子数组: [1,2], [2,1], [1,2], [2,3], [1,2,1], [2,1,2...示例 2: 输入:A = [1,2,1,3,4], K = 3 输出:3 解释:恰好由 3 个不同整数组成的子数组: [1,2,1,3], [2,1,3], [1,3,4]....解题 参考官方思路 每次遍历一个右端点 r,以该右端点为结束的满足题意的子数组有多少个 左端点有两个极限位置 l1, l2,[l1, r]刚好有 k 个不同数字,[l2, r] 刚好有 k-1 个不同数字

    65220

    删除排序数组中的重复数字 双指针+替换

    给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。...样例 给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]。...双指针+替换 双指针加替换,排序好的数组就更简单,不用查找,只需比较就可以,这个和移动0那个很像,但是比那个稍微复杂一点,因为不是每个数和0来比较,而是要和替换后最后一个数比较,如果可以用另外一个数组当然更简单...,这里要求原位进行,所以注意第一个数的处理就可以: int removeDuplicates(vector &nums) { if(nums.size()==0)...=nums[j]) { nums[j+1]=nums[i]; //这里从第二个数开始替换,第一个数不用替换 j++;

    97330

    面试题005:请解释一下C语言中的指针数组和数组指针。它们有什么不同?

    问题4 请解释一下C语言中的指针数组和数组指针。它们有什么不同? 参考答案 当面试官问到C语言中的指针数组和数组指针时,可以从概念、示例和区别几个方面详细说明了它们的含义和区别。...指针数组和数组指针是C语言中涉及指针和数组的两个不同概念,虽然它们都涉及到数组和指针的结合使用,但在语法和语义上存在一些区别。 「指针数组:」指针数组是一个数组,其中的每个元素都是一个指针。...这意味着每个元素可以指向一个不同的内存位置。这些指针可以指向不同类型的数据,如整数、字符、结构体等。通常,指针数组用于存储一组指针,每个指针可以指向一个独立的数据对象。...指针数组的元素是指针,数组指针指向数组的首元素。 数组指针可以通过指针算术运算遍历数组的元素,而指针数组的元素是指针,不能通过指针算术运算直接访问数组元素。...数组指针在函数参数传递中常用于传递数组,指针数组用于存储多个指针,每个指针可以指向不同的数据。 总结来说,指针数组和数组指针是C语言中两个涉及指针和数组的不同概念。

    31630

    K 个不同整数的子数组(双指针)(滑动窗口)

    题目 给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定独立的子数组为好子数组。...(例如,[1,2,3,1,2] 中有 3 个不同的整数:1,2,以及 3。) 返回 A 中好子数组的数目。...思路 把「恰好」改成「最多」就可以使用双指针一前一后交替向右的方法完成,这是因为 对于每一个确定的左边界,最多包含 KK 种不同整数的右边界是唯一确定的,并且在左边界向右移动的过程中,右边界或者在原来的地方...而「最多存在 KK 个不同整数的子区间的个数」与「恰好存在 K 个不同整数的子区间的个数」的差恰好等于「最多存在 K - 1K−1 个不同整数的子区间的个数」。...因为原问题就转换成为求解「最多存在 KK 个不同整数的子区间的个数」与 「最多存在 K - 1K−1 个不同整数的子区间的个数」,它们其实是一个问题。

    36110
    领券