求解答C语言“指针赋值”?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求解答C语言“指针赋值”?相关的知识,希望对你有一定的参考价值。

(1) int a =5; int *p=&a;
(2)int a =5; int *p; *p=&a
为什么第一种方法可以,第二种方式就报错说不能把“int*”换成“int”型呢?

int *p=&a相当于int *p;p=&a;,C语言允许指针在定义的时候赋值。
而int *p; *p=&a,是定义完后再赋值,这里试图把一个地址赋值给指针指向的变量,这样就会报错int *型不能赋值给int型。应该把地址直接赋值给指针,即p=&a
int *p意义是定义一个指针,而定义完后*p的意义是p指针指向内存空间的内容
参考技术A int* p是定义一个指针p。
int *p和 *p可不是一个意思哟
*p = &a是不行的 *p是p指针存的数据,而&a是指针类型。
(2)int a =5; int *p; *p=a;这样是可以的
参考技术B 第一种的int *p=&a相当于 int *p;p=&a;将a的地址赋给p;

而第二种 *p=&a,*p是p地址所指向的值,&a是地址,不能直接将地址赋给非指针变量
参考技术C 第一种可以使因为 对变量p声明并赋值(初始化),声明为int *,值为 &a,没错
第二种 声明 int *p时未赋值, 而你赋值时 p是指针int *,则*p则为int , &a为int *,所以报错
参考技术D *p为int类型,&a为地址(int* 类型);
*p=&a该为 p=&a;

求解答 c语言

实验一:

#include <stdio.h>

int main()

    int num[2], i;
    for (i = 0; i < 2; i ++)
        scanf("%d", &num[i]);
    printf("%d\\n", abs(num[0] - num[1]));
    return 0;

实验二:

#include <math.h>

float factorial(long n)

    int i;
    float result = 1.0;
    for (i = 1; i < n; i ++)
        result *= i;
    return result;


float solve(long x)

    int i;
    float sum = 0.0;
    if (x != 0)
        for (i = 0; i < 20; i ++)
            sum += pow(x, i) / factorial(i);
    else
        printf("Error: x cannot be 0!\\n");
    return sum;

实验三:

int main()

    char str[128], anothstr[128];
    int i, ucases = 0;
    gets(str);
    for (i = 0; i < strlen(str); i ++)
        anothstr[strlen(str) - i - 1] = str[i];
    for (i = 0; i < strlen(str); i ++)
        if (str[i] >= 'A' && str[i] <= 'Z')
            ucases ++;
    printf("%s\\n", anothstr);
    printf("%d\\n", ucases);
    return 0;

参考技术A 这些基础的c语言题百度上都能搜到的,有现成的答案

以上是关于求解答C语言“指针赋值”?的主要内容,如果未能解决你的问题,请参考以下文章

关于C语言里面指针赋值的类型问题,还有一些关于指针的问题

C语言同类型指针赋值简单问题

c语言如何给结构体指针赋值?

C语言程序设计 指针变量赋值

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

c语言常量指针赋值给变量指针导致警告