关于C语言指针赋值的问题详解

 更新时间:2020年4月25日 17:47  点击:1342

一个代码:

复制代码 代码如下:

#include<stdio.h>
#include<stdlib.h>
#define uchar unsigned char
#define uint unsigned int

void display(uchar *p);

char h[4] = {'A','B','C','\0'};
char e[4] = {'E','F','L','\0'};
char l[4] = {'M','N','O','\0'};
char o[4] = {'X','Y','Z','\0'};

int main(void)
{
    int i;
    char c;
    uint set[5];

    set[0] = h;
    set[1] = e;
    set[2] = l;
    set[3] = l;
    set[4] = o;

       while(1){
           for (i = 0; i < 5; ++i){
                display(set[i]);
                printf("\n");
                sleep(1);

          }

       }
}

void display(uchar *p)
{
   while(*p != '\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[1] = e;
set[2] = l;
set[3] = l;
set[4] = o;
29是
display(set[i])

虽然只是警报,并且在linux下面也可以运行的很好.但是既然警告了.还是值得讨论下.

待续~
关注中...

如果有哪位知道.可否回复告诉我.谢谢~

------------------------------------------------------------

关于这个问题,我问了寝室的小丁.经过他的修改.程序已经不报警告了.

复制代码 代码如下:

#include<stdio.h>
#include<stdlib.h>
#define uchar unsigned char
#define uint unsigned int

void display(uchar *p);

char h[4] = {'A','B','C','\0'};
char e[4] = {'E','F','L','\0'};
char l[4] = {'M','N','O','\0'};
char o[4] = {'X','Y','Z','\0'};

int main(void)
{
    int i;
    char c;
    int set[5];

    set[0] =(int) h;
    set[1] =(int) e;
    set[2] =(int) l;
    set[3] =(int) l;
    set[4] =(int) o;

       while(1){
           for (i = 0; i < 5; ++i){
                display((uchar *)set[i]);
                printf("\n");
                sleep(1);

          }

       }
}

void display(uchar *p)
{
   while(*p != '\0'){
    printf("%c", *p);
    printf("%c", *(p+1));
    ++p;
    }
}


在字模数组的首地址赋值方面用了强制转换为int.在函数调用方面.因为子函数中要求到输入为指针,所以在前面的调用时候,不能单纯的写set[i].而是传指针过去.(uchar *)的强制类型转换是为了配合(uchar *p).
-------------------------------------------
应该注意的2点是:
1.给指针只能传地址,不能传值.否则要做强制类型转换.
2.在做类型转换和赋值时候,应该注意赋值的类型匹配.

[!--infotagslink--]

相关文章

  • php数组操作 键名比较 差集 交集赋值

    本文章提供在量的数据中级操作实例有如对键名比较计算数组的差集 计算差集 给指定数组中插入一个元素 反转数组 交集赋值新的数组实例。 //定义回调函数 funct...2016-11-25
  • c# 判断是否为空然后赋值的4种实现方法

    下面小编就为大家分享一篇c# 判断是否为空然后赋值的4种实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-25
  • vue 数据(data)赋值问题的解决方案

    这篇文章主要介绍了vue 数据(data)赋值问题的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-29
  • java中String类型变量的赋值问题介绍

    下面小编就为大家带来一篇java中String类型变量的赋值问题介绍。小编觉得挺不错的。现在分享给大家,给大家一个参考。...2016-03-28
  • python 实现循环定义、赋值多个变量的操作

    这篇文章主要介绍了python 实现循环定义、赋值多个变量的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • react使用antd表单赋值,用于修改弹框的操作

    这篇文章主要介绍了react使用antd表单赋值,用于修改弹框的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29
  • postgresql 补齐空值、自定义查询字段并赋值操作

    这篇文章主要介绍了postgresql 补齐空值、自定义查询字段并赋值操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-16
  • AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值

    这篇文章主要介绍了AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值的相关资料,本文介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下...2016-01-26
  • JS实现DIV容器赋值的方法

    这篇文章主要介绍了JS实现DIV容器赋值的方法,可结合ajax使用,涉及JavaScript针对页面元素的动态操作技巧,需要的朋友可以参考下...2015-12-16
  • python for循环赋值问题

    这篇文章主要介绍了python for循环赋值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-03
  • C# 通过反射获取类型的字段值及给字段赋值的操作

    这篇文章主要介绍了C# 通过反射获取类型的字段值及给字段赋值的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-19
  • chrome监听cookie变化与赋值问题

    这篇文章主要介绍了chrome监听cookie变化与赋值问题,cookie监听与赋值操作需要manifest文件里声明权限问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-10-22
  • Javascript中的解构赋值语法详解

    这篇文章主要给大家介绍了关于Javascript中解构赋值语法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-02
  • SQL SERVER中SELECT和SET赋值相同点与不同点(推荐)

    SELECT和SET在SQL SERVER中都可以用来对变量进行赋值,但其用法和效果在一些细节上有些不同。今天小编给大家分享SQL SERVER中SELECT和SET赋值相同点与不同点,感兴趣的朋友一起看看吧...2020-07-11
  • vue data变量相互赋值后被实时同步的解决步骤

    这篇文章主要介绍了vue data变量相互赋值后被实时同步的解决步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-05
  • C++中对象的赋值与复制操作详细解析

    对象之间的赋值也是通过赋值运算符“=”进行的。本来赋值运算符“=”只能用来对单个的变量赋值,现在被扩展为两个同类对象之间的赋值,这是通过对赋值运算符的重载实现的...2020-04-25
  • vue实现动态给id赋值,点击事件获取当前点击的元素的id操作

    这篇文章主要介绍了vue实现动态给id赋值,点击事件获取当前点击的元素的id操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-10
  • JavaScript解构赋值的5个常见场景与实例教程

    解构赋值是一种特殊的语法,它使我们可以将数组或对象“拆包”为到一系列变量中,因为有时候使用变量更加方便,下面这篇文章主要给大家介绍了关于JavaScript解构赋值的5个常见场景与实例的相关资料,需要的朋友可以参考下...2021-11-02
  • Golang Map实现赋值和扩容的示例代码

    这篇文章主要介绍了Golang Map实现赋值和扩容的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-05-11
  • 浅谈tensorflow中张量的提取值和赋值

    今天小编就为大家分享一篇浅谈tensorflow中张量的提取值和赋值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-22