精华内容
下载资源
问答
  • 怎么对指针变量初始化
    千次阅读
    2019-05-14 20:03:35

    那么怎么给一个指针变量初始化呢?即怎么样使一个指针变量指向另一个变量呢?上面的程序实际上已经使用了,即可以用赋值语句使一个指针变量得到另一个变量的地址,从而使他指向该变量。比如:

    int i, *j;
    j = &i;
    

    这样就将变量 i 的地址放到了指针变量 j 中,通过 i 的地址,j就能找到 i 中的数据,所以j就“指向”了变量 i。其中 & 是“取地址运算符”,与 scanf中的 & 是一样的概念,* 为“指针运算符”,功能是取其内部所存变量地址所指向变量中的内容。因为 j 是定义成指针型变量,所以 j 中只能存放变量的地址,所以变量 i 前一定要加 &。大家一定要记住,指针变量中只能存放地址,不要将一个整数或者任何其他非地址类型的数据付给一个指针变量。

    此外还有两点需要注意:
    第一:j 不是 i,i 也不是 j。修改j 的值不会影响 i 的值,修改 i 的值不会影响 j 的值。j 是变量 i 的地址,而 i 是变量 i 里面的数据,一个是“内存单元的地址”,另一个是“内存单元的内容”

    第二:定义指针变量时的 *j 和程序中用到的 “*j”含义不同。定义指针变量时的“j”只是一个声明,此时的“”仅仅表示该变量是一个指针变量,并没有其他含义。而且此时该指针变量并未指向任何一个变量,至于具体指向哪个变量要在程序中指定,即给指针变量初始化。而当指定j指向变量 i 之后,“*j”就完全等同于 i 了,可以互相替换。

    #include<stdio.h>
    int main(void)
    {
    	int i = 3, *j;
    	j = &i;
    更多相关内容
  • c语言指针变量初始化 在C中声明,初始化和使用指针变量 (Declaring, Initializing and using a pointer variable in C) In this tutorial, we will learn how to declare, initialize and use a pointer. We will ...

    c语言指针变量初始化

    In this tutorial, we will learn how to declare, initialize and use a pointer. We will also learn what NULL pointer are and where to use them. Let's start!

    在本教程中,我们将学习如何声明,初始化和使用指针。 我们还将学习什么是NULL指针以及在哪里使用它们。 开始吧!

    C指针变量的声明 (Declaration of C Pointer variable)

    General syntax of pointer declaration is,

    指针声明的一般语法是

    datatype *pointer_name;

    Data type of a pointer must be same as the data type of the variable to which the pointer variable is pointing. void type pointer works with all data types, but is not often used.

    指针的数据类型必须与指针变量指向的变量的数据类型相同。 void类型指针适用于所有数据类型,但并不经常使用。

    Here are a few examples:

    这里有一些例子:

    int *ip     // pointer to integer variable
    float *fp;      // pointer to float variable
    double *dp;     // pointer to double variable
    char *cp;       // pointer to char variable

    C指针变量的初始化 (Initialization of C Pointer variable)

    Pointer Initialization is the process of assigning address of a variable to a pointer variable. Pointer variable can only contain address of a variable of the same data type. In C language address operator & is used to determine the address of a variable. The & (immediately preceding a variable name) returns the address of the variable associated with it.

    指针初始化是将变量的地址分配给指针变量的过程。 指针变量只能包含相同数据类型的变量的地址。 在C语言中, 地址运算符 &用于确定变量的地址。 & (紧邻变量名)返回与之关联的变量的地址。

    #include<stdio.h>
        
    void main()
    {
        int a = 10;
        int *ptr;       //pointer declaration
        ptr = &a;       //pointer initialization
    }

    Pointer variable always point to variables of same datatype. Let's have an example to showcase this:

    指针变量始终指向相同数据类型的变量。 让我们举一个例子来说明这一点:

    #include<stdio.h>
    
    void main()
    {
        float a;
        int *ptr;
        ptr = &a;       // ERROR, type mismatch
    }

    If you are not sure about which variable's address to assign to a pointer variable while declaration, it is recommended to assign a NULL value to your pointer variable. A pointer which is assigned a NULL value is called a NULL pointer.

    如果不确定在声明时将哪个变量的地址分配给指针变量,建议将NULL值分配给指针变量。 分配了NULL值的指针称为NULL指针

    #include <stdio.h>
    
    int main() 
    {
        int *ptr = NULL;
        return 0;
    }

    使用指针或指针取消引用 (Using the pointer or Dereferencing of Pointer)

    Once a pointer has been assigned the address of a variable, to access the value of the variable, pointer is dereferenced, using the indirection operator or dereferencing operator *.

    一旦为指针分配了变量的地址,即可访问该变量的值,就可以使用间接运算符或反引用运算符 *对该指针进行 引用

    #include <stdio.h>
    
    int main()
    {
        int a, *p;  // declaring the variable and pointer
        a = 10;
        p = &a;     // initializing the pointer
    
        printf("%d", *p);    //this will print the value of 'a'
    
        printf("%d", *&a);   //this will also print the value of 'a'
    
        printf("%u", &a);    //this will print the address of 'a'
    
        printf("%u", p);     //this will also print the address of 'a'
    
        printf("%u", &p);    //this will print the address of 'p'
        
        return 0;
    }

    使用指针时要记住的要点 (Points to remember while using pointers)

    1. While declaring/initializing the pointer variable, * indicates that the variable is a pointer.

      在声明/初始化指针变量时, *表示该变量是指针。

    2. The address of any variable is given by preceding the variable name with Ampersand &.

      任何变量的地址都在变量名前加上&来给定。

    3. The pointer variable stores the address of a variable. The declaration int *a doesn't mean that a is going to contain an integer value. It means that a is going to contain the address of a variable storing integer value.

      指针变量存储变量的地址。 声明int *a并不意味着a将包含一个整数值。 这意味着a将包含一个存储整数值的变量的地址。

    4. To access the value of a certain address stored by a pointer variable, * is used. Here, the * can be read as 'value at'.

      要访问指针变量存储的某个地址的值,请使用* 。 在这里, *可以读作'at的值

    时间为例! (Time for an Example!)

    Let's take a simple code example,

    我们来看一个简单的代码示例,

    #include <stdio.h>
    
    int main()
    {
        int i = 10;     // normal integer variable storing value 10
        int *a;     // since '*' is used, hence its a pointer variable
    
        /*
            '&' returns the address of the variable 'i' 
            which is stored in the pointer variable 'a'
        */
        a = &i;
    
        /* 
            below, address of variable 'i', which is stored 
            by a pointer variable 'a' is displayed
        */
       printf("Address of variable i is %u\n", a);
    
        /*
            below, '*a' is read as 'value at a' 
            which is 10
        */
       printf("Value at the address, which is stored by pointer variable a is %d\n", *a);
    
       return 0;
    }

    Address of variable i is 2686728 (The address may vary) Value at an address, which is stored by pointer variable a is 10

    变量i的地址为2686728(地址可能有所不同),该值由指针变量a存储的地址值为10

    翻译自: https://www.studytonight.com/c/declaring-and-initializing-pointer.php

    c语言指针变量初始化

    展开全文
  • 首先是指针变量的定义:指针是一种保存变量地址的变量。 指针中最容易出现理解错误的地方就是指针为什么一定要先初始化,下面我将递进式的讨论这个问题。 一,首先定义指针*p1;此时p1中保存的必须是一个地址,下面这...

    首先是指针变量的定义:指针是一种保存变量地址的变量。
    指针中最容易出现理解错误的地方就是指针为什么一定要先初始化,下面我将递进式的讨论这个问题。

    一,先说明只要是指针类型如果不利用已有的指针变量赋初始值,则必须要进行初始化,不然会出现会出现很多问题。
    如果是普通的指针变量,则可以用 指针变量名=&普通变量名 赋初始值,如果是结构体指针,则需要用new动态分配内存空间。
    其实我之前写过java中的引用和c/c++中的指针差不多里面都存了一个指向数据的地址,只不过c中的指针是自己主动定义的,而java中的引用是有固定的的数据类型(对象,数组,接口),而且java中引用必须要用new分配实体。
    二,首先定义指针*p1;此时p1中保存的必须是一个地址,下面这段代码是非法的,因为赋初始值时p1必须指向一段地址。

    	int a=5;
    	int *p1;
    	p1=a;
    

    三,下面这段代码和和上面代码的区别就是让*p1=a,而不是p1=a,按照优先级也就是(p1)=a,这里就牵扯到指针最难理解的地方。p1内存放的是一段地址,而*""**的含义则是指向p1内存放的地址中的数据。当我们定义p1时它没有被初始化(此时指针被叫做悬浮指针或野指针),那么程序就不知道它指向哪里,它可能指向一个非法地址,这时,程序会报错。它也可能指向一个合法地址,这种情况更危险,你的程序或许能正常运行,但是这个没有被初始化的指针所随机指向的那个位置的值可以被修改,而你可能并无意去修改它。
    所以下面的代码会出现两种情况
    第一种情况:p存放的是一个非法地址,此时**"*p"也就是将a赋值给p1内存放的地址中的数据,此时程序是不合法的(大部分是这种情况)
    第二种情况:p指向的是一个随机的合法地址,此时
    "*p"**就是将a赋值给p1内存放的地址中的数据,此时程序虽然是合法的,但你有可能修改了其他你不想修改的数据数据。
    所以综上所述下面这段代码也是不合法的。什么时候这段代码就是合法的了呢?请看四。

    	int a=5;
    	int *p1=a;
    

    四,那么正确的写法是下面

    int a=5;
    	int *p1;
    	p1=&a;
    //或
    	int *p1=&a;
    

    这段代码不用多解释,就是先定义指针*p,然后将a的地址赋给p1;
    要说明的是,当你给指针初始化以后下面的代码就合法了,此时p里存放的是a的地址,*p指向a地址内的数据,也就是将a的值变为了6。

    	int a=5;
    	int *p1;
    	p1=&a;
    	int *p1=6;
    

    五,当我们初始化完指针变量之后,之前的第二个问题中的代码就合法了

    1int a=5,b=6;
    2	int *p1;
    3	p1=&a;
    4	*p1=b;
    

    上面的代码我们第三行对指针进行了初始化,然后第四行让*p1=b,此时代码是合法的,因为对指针进行初始化之后,第四行的意思就是将b的值6覆盖p1中存放的地址中原来的数据5,但p1中存放的地址并没有改变(还是初始时a的地址),但地址里的数据也就是a的值却改变了,变成了b里的数据。你们可以思考一下次数输出a,b,&a,&b,p1,&p1的值是多少,有哪些是相等的

    六,最后再来说一个例子
    数据结构顺序栈入栈代码如下

    1Status Push(Sqstack &S,Elemtype e)
    2{//入栈 
    3	if(S.top-S.base==stacksize)		//判断栈满
    4	return OVERFLOW;				
    5	*S.top++=e; 
    }
    

    其中的第五行代码就是把e的值赋给S.top中存放的内存指向的数据,之所以可以使用这句话就是因为之前栈的初始化已经给top进行了初始化。

    展开全文
  • 这段代码不能初始化innrtc这个结构体成员,原因是因为初始化的这些值只是对指针赋值,并没有赋值到指针地址下的变量。innrtc相当于野指针。 2,下面的代码是正确的: //file1.c代码不变 //file2.c代码如下 struct ...

    1,以下代码是有问题的:

    //file1.c里有如下代码
    struct innrtc_t {
    	u8 it_works_timer;
    	u8 lose_effect_timer;
    	u16 target_temputer;
    	u16 wakeup_period;
    	u32 start_time;
    	u32 stop_time;
    	float line_slope;
    };
    void innrtc_init(struct innrtc_t *rtc)
    {
    	innrtc->it_works_timer = 0;
    	innrtc->lose_effect_timer = 0;
    	innrtc->target_temputer = 0;
    	innrtc->wakeup_period = 0;
    	innrtc->start_time = 0;
    	innrtc->stop_time = 0;
    	innrtc->line_slope = 0.0;
    }
    
    //file2.c中有如下代码
    struct innrtc_t *innrtc;
    innrtc_init(innrtc);
    

    这段代码不能初始化innrtc这个结构体成员,原因是因为初始化的这些值只是对指针赋值,并没有赋值到指针地址下的变量。innrtc相当于野指针。

    2,下面的代码是正确的:

    //file1.c代码不变
    //file2.c代码如下
    struct innrtc_t innrtc;
    innrtc_init(&innrtc);
    
    //或者
    struct innrtc_t *innrtc;
    innrtc = (struct innrtc_t *)malloc(sizeof(struct innrtc_t));
    if(innrtc == NULL)
    {
    	//... ...
    }
    innrtc_init(&innrtc);
    // ... ... 
    free(innrtc);
    

    我的理解:
    1,如果定义一个结构体指针变量,就一定要为这个结构体指针变量赋值一个有效的地址,否则因为结构体指针变量地址不明确,那之后得到的结构体成员值也不明确。
    2,定义结构体变量而不是指针不会出现问题的原因,定义结构体变量编译器会明确的把这个结构体变量分配到栈中,同样使用malloc来申请一块内存,编译器会明确的把结构体指针分配到堆中,这都是有效地址,所以不会出错。

    展开全文
  • 今天遇到一个小问题,定义一个全局的指针变量p1,并通过malloc动态分配内存的方法,将一块内存的首地址赋给p1。代码如下:char *p1=malloc(1000);但是使用 gcc 命令编译后报出如下错误(使用C99标准) 看了别人的博客后...
  • 指针学习三——指针变量初始化

    千次阅读 2019-12-19 21:57:36
    指针变量的初始化——必须先赋值后使用 ... 不能用数值作为指针变量的值,但可以将一个指针变量初始化为一个空指针。 指针变量定义是的存储单元和它所指向的目标变量的数据类型必须一致。 例如: int *p=1000; ...
  • 在了解指针变量初始化之前,首先要弄清楚一点:什么是指针?1、指针的内容实际上是一个地址,我们只要给指针赋值一个地址,它将会指向这个地址表示的内存空间,这也是指针的作用,我们要访问某个地址时,这个指针...
  • 一、指针变量的定义及使用 1.指针变量的定义 指针变量就是存储指针的变量,而变量的指针指的是变量的存储地址 int *a; char *b; float *c /* 分别定义了整型、字符型、浮点型的指针变量a,b,c */ 2.指针变量的使用 ...
  • 这一小结我们开始学习指针变量的定义和初始化: 指针的定义:存放变量的地址需要一种特殊类型的变量,而这种特殊的数据类型被称作指针。 指针变量:具有指针类型的变量,被成为指针变量,其定义形式如下: 类型...
  • 指针变量定义和初始化

    千次阅读 2019-04-17 08:16:47
    1.指针定义和初始化 2.指向数组的指针 指针数组 指针定义 ...指针变量初始化 语法形式 存储类型 数据类型*指针名=初始地址; 例: int *pa = &a; 注意事项 用变量地...
  • c语言结构体指针初始化

    千次阅读 2021-05-21 07:15:48
    今天终于看完了C语言深度剖析这本书,C语言有了进一步的了解与感悟,突然发觉原来自己学C语言的时候学得是那样的迷糊,缺少深入的...定义了指针变量,没有为指针分配内存,即指针没有在内存中指向一块合法的内存...
  • 指针 本质 地址 指向变量的指针,是变量中数据内存的地址, 指向函数的指针是代码内存的地址, 指向数据的指针指向数组开始位置的地址...(1)当我们int *p定义一个指针变量p时,如果p是局部变量,所以也道循C语言局部变
  • 指针初始化和赋值(简单说明)

    千次阅读 2021-06-18 15:23:21
    突然关于指针有个地方搞不明白,比如int *p=&a;我们不是说"*"是取值的吗,那么后面不应该跟的是一个数值,怎么是一个地址?
  • 指针变量的赋值指针变量同普通变量一样,使用之前不仅要定义说明, 而且必须赋予具体的值。未经赋值的指针变量不能使用, 否则将造成系统混乱,甚至死机。指针变量的赋值只能赋予地址, 决不能赋予任何其它数据,...
  • 指针初始化和赋值

    千次阅读 多人点赞 2018-01-05 17:00:58
    1、指针的初始化 指针初始化时,“=”的右操作数必须...此时,*p只是表示定义的是个指针变量,并没有间接取值的意思。 例如: int a = 25; int *ptr = &a; int b[10]; int *point = b; int *p = &b[0];   如
  • 成员是一个指针变量,那么最好在构造函数中将指针初始化,如果不初始化,编译器并不是将此指针指向NULL。因此,当使用if(!point) 进行判断的时候就会出现错误,而且调试很麻烦。 但是当你定义一个全局...
  • 变量初始化详解

    千次阅读 2021-11-30 09:48:58
    变量初始化分为两大类: 1、静态变量初始化 2、自动变量初始化 静态变量存储在程序的静态变量区,其初始化过程是在程序加载时,由系统自动完成的,如下图: 所有的静态变量(初值为0的变量除外)都是从FLASH中直接...
  • 指针变量初始化

    千次阅读 2017-11-18 11:09:11
    //若指针变量初始化空,在使用指针时,必须判断是是否为空,两个步骤必须同时存在 if(p!=NULL) *p = 20; system("pause"); return 0; } int main() { int num = 0; int *p = (int*)# *p = 20; ...
  • C 结构体指针初始化

    万次阅读 2019-04-26 23:18:31
    原文 C 结构体指针初始化,CSDN同步发布。 转载请注明出处,谢谢! 在使用指针之前,务必要将其初始化。这个是我们最早学习 C 语言的时候,书上经常说的一个问题。在工作中,我们反而会经常忘记这条金科玉律。 本篇...
  • 全局变量和静态变量初始化总结

    千次阅读 2022-03-28 10:43:32
    c++保证,全局变量在main函数第一次使用它之前,就把它初始化好。【可以直接理解成在main函数执行前就初始化好】但这个初始化可细分为:编译时初始化和运行时初始化,即static initialization和dynamic ...
  • c++指针初始化问题

    万次阅读 多人点赞 2018-12-13 11:47:18
    c++中的指针是一个很经典的用法,但是也是最容易出错的,比如定义了一个指针,必须其进行初始化,不然这个指针指向的是一个未知的内存地址,后续其操作的时候,会报错。这只是其次,最让人头疼的就是指针错误...
  • C++11中变量初始化方法汇总

    千次阅读 2019-10-25 17:19:58
    参考资料 [1] C++ Primer中文版(第5版) 1 背景     参考资料[1]P39提到,在C++语言中,初始化...
  • 使用了可能未初始化的本地指针变量“old” 右键——>选择属性 SDL检查:更改为否
  • c语言结构体学习整理(结构体初始化,结构体指针)

    万次阅读 多人点赞 2018-11-01 20:22:12
    首先我们为什么要用到结构体,我们都已经学了很多int char …等类型还学到了同类型元素构成的数组,以及取上述类型的指针,在一些小应用可以灵活使用,然而,在我们实际应用中,每一种变量进行一次声明,再结合起来...
  • 指针初始化

    万次阅读 多人点赞 2018-12-06 20:13:37
    有下面的代码 #include&...我在这里声明创建了一个名为a的指针变量,然后把1赋值给a所指向的那块内存空间。编译结果如下: a未初始化,到底指向哪里根本我们不得而知。所以我们在进行赋值...
  • 结构体指针需要初始化

    千次阅读 2019-02-22 21:43:00
    在使用结构体指针变量的时候,往往容易犯一个“低级”错误,即定义一个结构体指针变量后就直接结构体指针变量所指向的结构体成员进行操作,从而产生一些莫名其妙的错误。我们必须要给结构体指针变量赋予一个有效的...
  • 错误 9 error C4703: 使用了可能未初始化的本地指针变量“outStr” e:\c\bsdiff\bsdiff\bzip2.c 1293 1 bsdiff 错误 11 error C4703: 使用了可能未初始化的本地指针变量“outStr” e:\c\bsdiff\bsdiff\bzip2.c 1...
  • 其初始化本质上与其它变量初始化没有什么区别,就是赋予其一个初始化的值。对于指针来说,在C语言中,就是一个地址。区分初始化情况,有四种表象:1 初始化为空。即char * str = NULL;的形式,NULL在C语言中是特定...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 543,788
精华内容 217,515
关键字:

怎么对指针变量初始化