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

错误:表达式不可赋值(赋值给C指针的一部分)

错误:表达式不可赋值(赋值给C指针的一部分)

这个错误是由于在C语言中,尝试将值赋给一个表达式的一部分,特别是指针的一部分,导致的。在C语言中,指针是用来存储内存地址的变量,而不是存储具体的值。因此,不能将值直接赋给指针的一部分。

要解决这个错误,需要确保赋值操作的目标是一个可修改的变量,而不是一个表达式的一部分。例如,以下代码会导致这个错误:

代码语言:txt
复制
int* ptr = (int*)malloc(sizeof(int));
*(ptr + 1) = 10; // 错误: 表达式不可赋值(赋值给指针的一部分)

在上面的代码中,(ptr + 1) 是一个表达式的一部分,它表示指针 ptr 向后移动一个 int 的大小。然而,这个表达式并不是一个可修改的变量,因此无法将值赋给它。

要修复这个错误,可以将赋值操作改为赋值给指针指向的变量,而不是指针的一部分。例如:

代码语言:txt
复制
int* ptr = (int*)malloc(sizeof(int));
*ptr = 10; // 正确: 将值赋给指针指向的变量

在上面的代码中,*ptr 表示指针 ptr 指向的变量,可以将值赋给它。

总结起来,错误"表达式不可赋值(赋值给C指针的一部分)"是由于尝试将值赋给一个表达式的一部分,特别是指针的一部分,导致的。要解决这个错误,需要确保赋值操作的目标是一个可修改的变量,而不是一个表达式的一部分。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

es6解构赋值_字符串赋值字符指针

大家好,又见面了,我是你们朋友全栈君。...ES6 模板字符串与解构赋值 解构赋值 展开运算符 模板字符串 特点 模板字符串可以换行 模板字符串中变量表达方式 ${变量/表达式} //模板字符串 //特点...特点: 可以定义默认值 可以嵌套 可以不完全解构 好处: 不通过遍历,方便快捷将元素取出来 //解构赋值 //可以定义默认值 //可以嵌套 //可以不完全解构...//数组用法 let a=[1,2,3] let [b,c,d]=a; console.log(b,c,d)//1,2,3 //数组解构赋值时可以嵌套 let s=[[1,2...一定要与对象属性名一致,如果想不一致的话,要在变量前面加属性名: console.log(name,age);//xiaoxiao 15 //错误写法 // let {fg

2.3K20
  • c语言中指针赋值问题,关于C语言指针赋值问题「建议收藏」

    大家好,又见面了,我是你们朋友全栈君。 为方便各位小伙伴更好学习C语言,武林技术小编为此大家整理了一批资料,供大家交流学习,下面就跟随武林技术频道编辑一起来先来看看关于C语言指针赋值问题。...= ‘/0’){ printf(“%c”, *p); printf(“%c”, *(p+1)); ++p; } } 警报如下: test.c:21: 警告: 赋值时将指针整数,未作类型转换 test.c...:22: 警告: 赋值时将指针整数,未作类型转换 test.c:23: 警告: 赋值时将指针整数,未作类型转换 test.c:24: 警告: 赋值时将指针整数,未作类型转换 test.c:25...: 警告: 赋值时将指针整数,未作类型转换 test.c:29: 警告: 传递参数 1 (属于 ‘display’)时将整数赋指针,未作类型转换 其中21-25就是 set[0] = h; set...以上就是关于C语言指针赋值问题,想必都已有了一定了解,更多关于C语言内容请继续关注武林技术频道。

    1.6K10

    C 语言】指针间接赋值 ( 指针作为 函数参数 意义 | 间接赋值 代码示例 )

    文章目录 一、指针作为 函数参数 ( 间接赋值 ) 意义 二、间接赋值 代码示例 一、指针作为 函数参数 ( 间接赋值 ) 意义 ---- 调用函数时 , 调用 & 取地址 生成 实参 p , 将...指针变量 p 实参 传递给 函数形参 , 在函数中 借助传入 指针 可以 实现 与 外部函数 内存共享 , 在函数中使用 *p 修改内存值 , 可以将 运算结果通过 *p 传递出来 ; 指针 作为...函数参数 , 可以实现 主函数 与 被调用子函数 之间 内存交换 ; 下面是逻辑链 : 指针作函数参数 ( 间接赋值 ) -> 接口封装与设计 -> 模块划分 -> 软件分层 正是因为有了 间接赋值 ,...才能实现 接口封装与设计 , 进而实现了 模块划分 , 最后实现了 软件分层 ; 使用 指针 ( 一级指针 或 多级指针 ) 作为参数 , 可以更加灵活在 函数中 对 传入 指针 指向内存数据...进行处理 , 这些修改 , 可以保留到函数值返回之后 , 这些参数都可以作为返回值使用 ; 使用 指针 ( 一级指针 或 多级指针 ) 作为参数 , 实现了 main 函数 , 与 其它 子函数 之间

    1.2K10

    C 语言】指针间接赋值 ( 间接赋值三要素 | 间接赋值 使用三种场景 )

    ; ② 实参地址赋值形参 ; ③ 使用形参指针修改实参值 ; 间接赋值 3 大要素 : 要素 ① : 定义 实际变量 ( 实参 ) , 以及接收 实际变量 地址 指针参数 ( 形参 ) ; 如果...NULL; 要素 ② : 将 实际变量 ( 实参 ) 地址 , 赋值 形参 指针 ; // 实际变量 地址 , 赋值 形参指针 // 该指针变量将来用作 函数参数 p = &a; 要素 ③...: 使用 形参指针 修改 实际变量 ( 实参 ) 值 ; *p = 20; 二、间接赋值 使用场景 ---- 上述 间接赋值 3 要素 , ① 定义实参和形参 ; ② 实参地址赋值形参 ;..., 并为其设置 NULL 初始值 // NULL 就是 0 char *p = NULL; // 将 a 地址赋值 指针变量 p p = &a;...int a = 0; // 声明指针变量 , 并为其设置 NULL 初始值 // NULL 就是 0 int *p = NULL; // 将 a 地址赋值 指针变量

    1.9K20

    C语言指针初始化和赋值

    1、指针初始化 指针初始化时,“=”右操作数必须为内存中数据地址,不可以是变量,也不可以直接用整型地址值(但是int*p=0;除外,该语句表示指针为空)。...因为,在C语言里面,没有整体处理一个字符串机制 赋值: cp = “abcdefg”; *cp=”abcdefg” ;//错误!...字符串常量传递是它首地址,不可以通过*cp修改该字符串值,因为该字符串为常量,而它只是简单指针指向该字符串常量 3、指针常量 在C语言中没有一种内建(built-in)方法去表示指针常量,...对于这个赋值问题还可以换一个角度去理解,在C语言中,使用赋值操作符时,赋值操作符左边和右边表达式类型应该是相同,如果不是,赋值操作符将试图把右边表达式值转换为左边类型。...:一个具有0值整形常量表达式,或者此类表达式被强制转换为void *类型,则称为空指针常量,它可以用来初始化或赋任何类型指针

    2.5K10

    【编程基础】C语言指针初始化和赋值

    1、指针初始化 指针初始化时,“=”右操作数必须为内存中数据地址,不可以是变量,也不可以直接用整型地址值(但是int*p=0;除外,该语句表示指针为空)。...因为,在C语言里面,没有整体处理一个字符串机制 赋值: cp = "abcdefg"; *cp=”abcdefg” ;//错误!...字符串常量传递是它首地址,不可以通过*cp修改该字符串值,因为该字符串为常量,而它只是简单指针指向该字符串常量 3、指针常量 在C语言中没有一种内建(built-in)方法去表示指针常量,...对于这个赋值问题还可以换一个角度去理解,在C语言中,使用赋值操作符时,赋值操作符左边和右边表达式类型应该是相同,如果不是,赋值操作符将试图把右边表达式值转换为左边类型。...:一个具有0值整形常量表达式,或者此类表达式被强制转换为void *类型,则称为空指针常量,它可以用来初始化或赋任何类型指针

    2.9K80

    C 语言】指针数据类型 ( 指针类型变量 与 指针指向内存块 概念区别 | 指针赋值 | 指针运算 | 内存赋值 | 内存取值 | 内存修改注意事项 )

    指针指向内存块 概念区别 : 给定一个指针类型变量 : // 定义一个普通整型变量 int a = 888; // 声明 指针类型变量 // 将整型变量地址赋值指针类型变量 int *p =...&a; 1、指针赋值 指针赋值 : 上述指针变量 p 赋值操作 , 如 p = 0x7F451D12 , 只改变指针变量 p 值 , 没有改变指针变量 p 原来指向 内存块 中存储值 ; char..., p + 1 与 p++ 计算结果是指针地址值加上指针类型对应字节大小值 , 如果是 int 类型指针 , 则增加 4 字节 ; 3、内存赋值 ** 指针指向内存赋值 * 上述指针变量...: 内存赋值 : *p 如果在 等号 = 左边 , 则表示 指针 指向 内存 赋值 ; 从内存取值 : *p 如果在 等号 = 右边 , 则表示从 指针 指向 内存 取值 ; 5、内存修改注意事项...修改内存注意事项 : 指针赋值时 , 要 确保指针指向 内存 可以修改 , 全局数据区 中 常量区 值 不能修改 , 代码区 中值不能修改 , 堆区 和 栈区 中值 , 即使能修改 , 也要确保指针是正确

    3K20

    C 语言】多级指针 ( 在函数中生成 二级指针 | 通过传入 三级指针 进行间接赋值 )

    文章目录 前言 一、在函数中生成 二级指针 ( 通过传入 三级指针 进行间接赋值 ) 二、完整代码示例 前言 如果要 通过 函数形参 间接赋值 修改 n 级指针, 需要向函数中传入 n + 1...级指针 形参 ; 一、在函数中生成 二级指针 ( 通过传入 三级指针 进行间接赋值 ) ---- 通过 函数 形参变量 , 间接赋值 返回 生成 二级指针 函数 ; 如果要生成一个 二级指针 ,...必须传入 三级指针 , 才能修改 该 二级指针 ; 注意 : 传入 三级指针 , 不要直接修改该值 , 先创建一个临时 局部二级指针变量 , 将 二级指针 生成完毕后 , 最后再 三级指针 指向地址...进行赋值 ; 代码示例 : /** * @brief 生成二维指针 * @param num * @return */ int generate_memory(char ***p3, int.../ 打印字 二维指针 指向 num 个 一维数组 指向 字符串 printf_array(p, num); // 对 二维指针 指向数据进行排序 sort_array(p

    1K10

    C 语言】指针间接赋值 ( 直接修改 和 间接修改 指针变量 值 | 在函数中 间接修改 指针变量 值 | 在函数中 间接修改 外部变量 原理 )

    值 , 就是为其赋值一个地址值 , 使用 & 取地址符 , 将变量地址赋值指针变量 , 或者使用 malloc 函数分配内存赋值 指针变量 ; // 将变量地址赋值一级指针 p...= &a; 间接修改 指针变量 值 , 首先要 将 指针变量 地址值 , 赋值 1 个 二级指针 变量 , 通过 * 符号 , 间接修改 一级指针变量值 ; // 将一级指针地址赋值二级指针...0 int *p = NULL; // 声明二级指针变量 , 并为其设置 NULL 初始值 int **p2 = NULL; // 将变量地址赋值一级指针...p = &a; // 打印一级指针地址 printf("%d\n", p); // 将一级指针地址赋值二级指针 p2 = &p; // 间接修改指针值...// 将一级指针地址赋值二级指针 p2 = &p; // 间接修改指针值 *p2 = 12345678; // 打印一级指针地址 printf("%d\

    21.2K11

    C 语言】一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )

    0 , 下面的示例是错误 : // 错误示例 int get_value(char *key_value) { // 错误判定示例 if(*key_value !...= '\0') { return -1; } } C 语言中 指针 , 内存 等原理必须知道 , 不知道原理 , 就不会调用指针 ; Java 语言中都会调用 , 即使...不懂 其中内存 , 引用 相关内存 原理 ; 二、数组越界 ---- 定义数组变量后 , 为其赋值时 , 赋值内容 超出了数组大小 ; 错误示例 : "abc" 字符串需要 4 字节内存...返回调用者 ; 这块在 函数中 创建内存 , 不能是数组 , 必须使用 malloc 函数 , 在 堆内存 中创建一块内存空间 ; 在 函数内 创建数组 存储在 栈内存中 , 栈内存数据 ,...在函数结束后 , 其被系统自动回收 , 该内存可能被写入其它数据 ; 五、函数间接赋值形参操作 ---- 在函数中 , 如果需要通过 函数 形参指针变量 通过 间接赋值 返回相关结果 , 这个指针使用时要慎重

    2.1K10

    python语句、表达式、对象、变量、赋值、函数传参

    对象Object变量Variable名称Name赋值python函数参数传递    语句(Statement)、表达式(Expression)  语句与表达式并不是一个概念,表达式可以作为语句一部分,...表达式是有操作符(Operator)和操作数(Operand)组合,可以只有操作数而没有操作符。语句可以认为是计算机指令抽象表示,c语言中是通过分号来识别,python是规定有自己语句集。 ...当进行赋值时,先创建对象,对象具有值和类型;  随后assign the name to the object,通常译为将object赋值name,各人觉得译为把name指派给object更符合实际过程...虽然函数参数传递都是传对象引用(指针),而不复制对象。 ...但当传递参数为不可变对象(interger string etc.)时,由于对象不可改变,看起来效果像传值/复制;  当传递参数为可变对象(list etc.)时,传递对象可以在函数中改变,看起来效果像传指针

    79700

    重庆师范大学c语言考试系统题库,2018年重庆师范大学计算机与信息科学学院820计算机基础综合之C程序设计考研核心题库…

    则以下选项中值为6表达式是( )。...以下选项中,值为1表达式是( )。 【答案】C 【解析】ASCII 码表 ,选C 。 5. 以下涉及字符串数组、字符指针程序段,不会产生编译错误是( )。 A. B. C. D....字符指针变量和字符数组在内存中 存储情形不同,数组指的是按照数组长度分配若干存储空间,而指针只是一个存储字符串首地址存储空间,所以相同类型指针可以相互赋值,而数组不能直接用“=”赋值C 选项错误...数组不可以直接赋值字符 串 . 合法,故D 选项错误。 不合法,只有在数组初始化时可以直接赋值, 如 合法,并且定义数组时必须指定数组长度, 不 6. 有以下程序: 程序运行结果是( )。...7. fun 函数功能是:通过键盘输入x 所指整型数组所有元素赋值。在下画线处应该填写是( )。 A. B. C. D.

    40120

    C++第二弹 -- C++基础语法下(引用 内联函数 auto关键字 范围for 指针空值)

    类型转换和表达式传引用注意事项 上篇我们讲过, 传引用时, 权限等于或者缩小, 但是权限不能放大 类型转换 如下面这个例子, 将浮点型数据赋值整型变量, 在d赋值i时, 需要借助临时变量, 用临时变量存储转换后值..., 然后在赋值i, 所以i值是这个临时变量所赋, 而这个临时变量具有常性, 不可以修改, 所以涉及到权限放大, 因此错误. // 权限可以平移/缩小 不能放大 double d = 12.34...; // 类型转换 int i = d; int& r1 = d;//错误 const int& r2 = d;//可以 表达式赋值 如图所示, 表达式赋值也会产生临时变量, 临时变量具有常性...同样,缺少了初始化语句,编译器也可能会发出警告信息,但是这个声明本身是合法。 在编程时,常常需要把表达式赋值变量,这就要求在声明变量时候清楚地知道表达式类型。...指针空值nullptr(C++11) 1.C++98中指针空值 在良好C/C++编程习惯中,声明一个变量时最好该变量一个合适初始值,否则可能会出现不可预料错误,比如未初始化指针

    10610

    C++进阶】C++11认识与学习

    C++98中,new 出来一个int指针可以直接初始化,但是当有多个对象时,就只能用循环初始化,C++11列表初始化就解决了这个问题,可以用{},多个对象初始化。...左值:可以取地址,一般情况下,值可以被修改,左值可以出现在赋值符号左右边;例如变量名,解引用指针 右值:不可以取地址,右值只能出现在赋值符号右边;例如字面常量,表达式,函数返回值 是否能取地址是左值和右值最大区别...,如果想要直接调用,可借助auto将其赋值一个变量; 参数列表和返回值类型都可以省略,但是参数列表 [] ,和函数体 {} ,不可以省略,所以最简单  lambda 表达式为 []{} 捕捉列表说明...lambda函数捕捉列表必须为空 lambda表达式之间不能相互赋值 其实,lambda表达式底层是仿函数,即使两个lambda表达式看起来是一样,但它们在底层仍然不同,不属于同一个类型 七.新类功能...}; 九.包装器  迄今为止,学过可调用对象有3种: 函数指针 仿函数 lambda表达式 但是怎么把这三种对象存到一个对象里呢?

    16010

    c语言字符数组初始化三种方式_c语言赋值字符串

    ,字符数组赋值只能对其元素一一赋值,下面的赋值方法是错误。...char str[]; str="I am happy";//错误,字符数组赋值只能按元素一一赋值错误原因: C语言并没有提供可以直接操作字符串运算符;“=”可以用于其他数据类型赋值,但是不可以直接给字符串赋值...字符指针初始化: char* str="zifuchuanshuzu"; C语言对字符串常量是按照字符数组来处理,在内存中开辟了一个字符数组用来存放字符串常量,程序在定义字符串指针变量str时,只是把字符串首地址赋值...字符指针赋值: char *str; str="zifuzhizhen"; 对于字符指针这种赋值方式是正确。与字符数组不同。...(2)作为字符数组,与普通数组相同,区别在于它每一个元素是一个字符,所以不可以直接用“=”对字符数组赋值(parr[]=”zhifushuzu”,是错误赋值方式),但是可以对每一个元素进行赋值(charr

    2.5K20

    C语言初阶——操作符

    ---- ‍♂️前言   我们常常说C语言是灵活且强大语言,因为它有32个关键字,34种操作符,本文主要是介绍这些操作符。话不多说,直接开始! ‍...按位异或 ^  按位异或是相同为0,相异为1  利用异或号能够实现不依靠第三方变量交换两数操作,原理 a^a=0 赋值操作符 赋值操作符能对变量进行重赋值,能够随心所欲进行修改。...同样挑特殊介绍 取地址& 与 解引用*   这两个操作符是指针必备操作符,数据类型后加*表示指针型数据,对想指向变量加上&表示取出地址赋指针变量,而将指针变量加上*解引用后可以用得到原变量值...访问结构体成员 .  -> 访问结构体成员有两种方式:普通访问与指针访问 普通访问:结构体.成员名 指针访问:结构体指针->成员名 表达式求值 表达式求值顺序一部分是有操作符优先级和结合性决定...不要因为自己个人理解而写出逻辑混乱错误代码,我们可以将复杂语句拆分,代码简洁不一定可行,不出问题才是成功。   如果你觉得本文写还不错的话,期待留下一个小小赞,你支持是我分享最大动力!

    14710

    字符串整体赋值和比较问题

    目录 字符串整体赋值问题 一、指针赋值法 二、用strcpy()函数法 字符串整体比较问题 字符串整体赋值问题 我们平常一个字符串初始化了,但是后面我们想重新赋一个字符串却错误了,如下面的操作。...char a[10]="hello"; a="word";//这里是错误不能整体赋值 12 因为:数组名实质是指针常量,你不能给一个指针常量修改。...对于语句 char *a="hello"; 对于这个声明方式,会造成误解是:声明了一个字符指针(它会指向一个位置),将“字符串”赋值 指针表达式"*a"所指向地址。...但正解是:声明了一个字符指针后,并用字符串常量第一个字符地址赋值指针变量a。...即正确顺序是:1.分配内存字符指针;2.分配内存字符串;3.将字符串首地址赋值字符指针; 这里有两点需要考虑清楚地方: ① *a只是指向一个字符!

    47210
    领券