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

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

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

24110

指针内存大小

而在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位)。

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

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

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

8110

【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.4K22

认识 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.1K20

【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.4K53

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

题目 给你一个仅由大写英文字母组成字符串,你可以将任意位置上字符替换成另外字符,总共可最多替换 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; //记录第一次不一样元素指针位置

35310

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 个不同数字

63520

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

给定一个排序数组,在原数组中删除重复出现数字,使得每个元素只出现一次,并且返回新数组长度。 不要使用额外数组空间,必须在原地没有额外空间条件下完成。...样例 给出数组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++;

95830

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

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

23930

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 个不同整数子区间个数」,它们其实是一个问题。

34410
领券