精华内容
下载资源
问答
  • 给指针变量赋值地址

    千次阅读 2020-02-09 20:23:15
    1、给指针变量赋值 一个指针变量可以可以通过不同的方式获得一个确定的地址值,从而指向一个具体的对象(每当一个指针中存放了一个变量的地址的时候,我们就说这个指针指向了这个变量)。 int k=1,*q,*p; q=&k; ...

    1、给指针变量赋值
    一个指针变量可以可以通过不同的方式获得一个确定的地址值,从而指向一个具体的对象(每当一个指针中存放了一个变量的地址的时候,我们就说这个指针指向了这个变量)。
    int k=1,*q,*p;
    q=&k;
    这时可以说,q指向了变量k;
    q=&k+1
    q=&(k+1)这是错误的,指针q就是用来存放地址的,前面两个地址不是。
    2、通过指针变量获取地址值
    可以通过赋值运算,把一个指针变量中地址赋值给另一个指针变量,从而使这两个指向被变量指向同一个地址。
    int k,*p,*q;
    q=&k;p=q;
    也就是说指针变量q和p都指向了变量k.
    注:当进行赋值运算时赋值号两边指针变量的基本类型必须相同。
    3、给指针变量赋“空”值
    “空”:
    null的代码值为零,当执行了以上和赋值语句后,称p为空指针。null的代码值为零。
    p=’\0’
    p=0;
    注意:p并不是指向地址为零的存储单元,而是一个有确定值的“空。”

    展开全文
  • C语言指针赋值

    千次阅读 2017-01-07 23:13:01
    指针初始化时,“=”的右操作数必须为内存中数据的地址,不可以是变量,也不可以直接用整型地址值(但是int*p=0;除外,该语句表示指针为空)。此时,*p只是表示定义的是个指针变量,并没有间接取值的意思。 例如: ...
    

    1、指针的初始化

    指针初始化时,“=”的右操作数必须为内存中数据的地址,不可以是变量,也不可以直接用整型地址值(但是int*p=0;除外,该语句表示指针为空)。此时,*p只是表示定义的是个指针变量,并没有间接取值的意思。

    例如:

    int a = 25;

    int *ptr = &a;

    int b[10];

    int *point = b;   

    int *p = &b[0];


    如果:int  *p;

        *p = 7;

    则编译器(vs2008)会提示The variable 'p' is being used without being initialized.即使用了未初始化的变量p。

    因为p是指向7所在的地址,*p = 7给p所指向的内存赋值,p没有赋值,所以p所指向的内存位置是随机的,没有初始化的。

    int k;

    int *p;

    p = &k;  //给p赋值

    *p = 7; //给p所指向的内存赋值,即k= 7


    2、指针的赋值

    int *p;

    int a;

    int b[1];

    p = &a; 

    p = b; 

    指针的赋值,“=”的左操作数可以是*p,也可以是p。

    当“=”的左操作数是*p时,改变的是p所指向的地址存放的数据;

    当“=”的左操作数是p时,改变的是p所指向的地址。

    数组的变量名b表示该数组的首地址,因此p=b;也是正确的


    同类型的指针赋值:


    int val1 = 18,val2 = 19;

    int *p1,*p2;

    p1 = &val1;

    p2 = &val2;

    p1 = p2;   //注意啦,p1指向了val2,而没有指向val1


    备注:字符串与指针的初始化和赋值

    初始化:

    char *cp = "abcdefg"; //这个初始化过程,是将指针cp指向字符串的首地址,而并不是传递字符串的值。因为,在C语言里面,没有整体处理一个字符串的机制

    赋值:

    cp = "abcdefg";

    *cp=”abcdefg” ;//错误!字符串常量传递的是它的首地址,不可以通过*cp修改该字符串的值,因为该字符串为常量,而它只是简单的将指针指向该字符串常量


    3、指针常量

    在C语言中没有一种内建(built-in)的方法去表示指针常量,所以当我们使用它的时候通常先写成整型常量的形式,然后再通过强制类型转换把它转换成相应的类型,如:int * , double * , char *等。 所以后面所示的做法是不行的: int *p = 0x12345678 ; 正确的方式应为:int *p = (int *) 0x12345678; 要注意指针中只能存放地址,不能将一个非0值整型常量表达式或者其他非地址类型的数据赋给一个指针,原因就在此。在大多数计算机中,内存地址确实是以无符号整型数来表示的,而且多以16进制表示,但我们在C语言中不能用整型数去表示地址,只能用指针常量来表示,因为它是被用来赋给一个指针的。

    对于这个赋值问题还可以换一个角度去理解,在C语言中,使用赋值操作符时,赋值操作符左边和右边的表达式类型应该是相同的,如果不是,赋值操作符将试图把右边表达式的值转换为左边的类型。所以如果写出int *p = 0x12345678 ; 这条语句编译器会报错:'=' : cannot convert from ' const int ' to ' int * ' ,因为赋值操作符左边和右边的表达式的类型应该相同,而0x12345678是int型常量,p是一个指向int型的指针,两者类型不同,所以正确的方式是:int *p = (int *) 0x12345678 ; 


    4、指针初始化补充

    ANSI C定义了零指针常量的概念:一个具有0值的整形常量表达式,或者此类表达式被强制转换为void *类型,则称为空指针常量,它可以用来初始化或赋给任何类型的指针。也就是说,我们可以将0、0L、'/0'、2–2、0*5以及(void *)0赋给一个任何类型的指针,此后这个指针就成为一个空指针,由系统保证空指针不指向任何对象或函数。

    ANSI C还定义了一个宏NULL,用来表示空指针常量。大多数C语言的实现中NULL是采用后面这种方式定义的:#define  NULL  ((void *)0)。

    对指针进行初始化时常用的有以下几种方式:

      1.采用NULL或空指针常量,如:int *p = NULL;或 char *p = 2-2; 或float *p = 0;

      2.取一个对象的地址然后赋给一个指针,如:int i = 3;  int *ip = &i;

      3.将一个指针常量赋给一个指针,如:long *p = (long *)0xfffffff0;

      4.将一个T类型数组的名字赋给一个相同类型的指针,如:char ary[100]; char *cp = ary;

      5.将一个指针的地址赋给一个指针,如:int i = 3;  int *ip = &i;int **pp = &ip;

      6.将一个字符串常量赋给一个字符指针,如:char *cp = “abcdefg”;

    对指针进行初始化或赋值的实质是将地址或同类型(或相兼容的类型)的指针赋给它,而不管这个地址是怎么取得的。要注意的是:对于一个不确定要指向何种类型的指针,在定义它之后最好把它初始化为NULL并在解引用这个指针时对它进行检验防止解引用空指针。另外,为程序中任何新创建的变量提供一个合法的初始值是一个好习惯,它可以帮你避免一些不必要的麻烦。


    5、void *型指针

    ANSI C定义了一种void *型指针,表示定义一个指针,但不指定它指向何种类型的数据。void *型指针作为一种通用的指针,可以和其它任何类型的指针(函数指针除外)相互转化而不需要类型强制转换,但不能对它进行解引用及下标操作。C语言中的malloc函数的返回值就是一个void *型指针,我们可以把它直接赋给一个其他类型的指针,但从安全的编程风格角度以及兼容性上讲,最好还是将返回的指针强制转换为所需的类型,另外,malloc在无法满足请求时会通过返回一个空指针来作为“内存分配失败”的信号,所以要注意返回值指针的判空


    6、指向指针的指针

    在指针初始化的第5种方式中提到了用一个指针的地址来初始化一个指针。回忆一下上一讲的内容:指针是一种变量,它也有自己的地址,所以它本身也是可用指针指向的对象。我们可以将指针的地址存放在另一个指针中,如:

    int i = 5000;

    int *pi = &i;

    int **ppi = π

    此时的ppi即是一个指向指针的指针,下图表示了这些对象:

                              

    i的地址为108,pi的内容就是i的地址,而pi的地址为104,ppi的内容即是pi的地址。对ppi解引用照常会得到ppi所指的对象,所获得的对象是指向int型变量的指针pi。想要真正地访问到i.,必须对ppi进行两次解引用,如下面代码所示:

    printf("%d", i );

    printf("%d", *pi );

    printf("%d", **ppi );

    以上三条语句的输出均为5000。

    展开全文
  • 地址赋值给指针

    千次阅读 2016-12-18 10:54:46
    #include int main() { int * p; p=(int*)(0x12ff7c); std::cout return 0; }
    #include<iostream>
    

    int main()
    {
    int * p;

    p=(int*)(0x12ff7c);


    std::cout<<"p="<<p<<std::endl;
    return 0;
    }
    展开全文
  • #include <stdio.h> unsigned char *ptr = NULL; unsigned char num = 3; static void fun(unsigned char **mem) { *mem = &num; } int main() { fun(&... printf("%d \n"...
    #include <stdio.h>
    
    unsigned char *ptr = NULL;
    unsigned char num = 3;
    
    static void fun(unsigned char **mem)
    {
        *mem = &num;    
    } 
    
    int main()
    {
        fun(&ptr);
        printf("%d \n", *ptr);
        
        return 0;
    }

    转载于:https://www.cnblogs.com/GyForever1004/p/8605158.html

    展开全文
  • 关于数组给指针赋值的问题

    千次阅读 2017-05-15 10:00:24
    观察以下代码:int main() { int a[3][3]; int *p; int(*q)[3]; int **r; p = &a[0][0]; //p = a; 错误 q = a; // q = &a[0][0]; 错误 int **b = new int*[3]; for (int i = 0; i ; i
  • // 打印函数 template void disp(T i) { cout; }int main() { int i = 1; int *p = &i; *p = 2; // 通过指针赋值 disp(i); int j = 10; // 对指针赋值,将指针p指向j p = &j;
  • 类其实也是一种数据类型,也可以发生数据类型转换,不过这种转换只有在基类(父类)和派生类(子类)之间才有意义,并且只能将派生类赋值基类,包括将派生类对象赋值基类对象、将派生类指针赋值给基类指针、将...
  • 指针赋值

    千次阅读 2019-09-20 21:46:21
    指针赋值 上学期刚学C语言的时候很迷,老师说要避免野指针,但是空指针似乎又没办法赋值,就只好尽量减少指针的使用。 今天查了一下发现是这样赋值的: 先把要赋值的变量的地址空指针,然后才能把变量的值赋...
  • 1、特定地址赋值的方法: 比如0x4E000000的地址赋值10 (*(volatile unsigned *)0x4E000000)=10 2、函数指针定义需要用到关键字typedef 例如:typedef int (*initOSFile_func_t)(void); 这个时候initOSFile_func_...
  • 指针赋值
  • 在C++继承中,很容易遇到一个问题,那就是将派生类指针赋值给基类指针(向上转型)的情况,下面我们就来举例分析: 举一个多继承的例子: #include <iostream> using namespace std; //基类A class A { ...
  • 今天使用某个函数,其中的参数是类型为char**, 使用了一个固定的二维数组,将其赋值给予,编译时产生警告;在运行的调用的函数(其中没有任何对字符串内容的修改),打印其中的字符串,直接崩溃。 警告内容:...
  • 在C++继承中,很容易遇到一个问题,那就是将派生类指针赋值给基类指针(向上转型)的情况,下面我们就来举例分析: 举一个多继承的例子: #include <iostream> using namespace std; //基类A class A { ...
  • C++ 指针和const指针赋值

    千次阅读 2018-11-29 07:55:00
    一 简单示例 int a;...即非const指针不能指向const数据(数据为非指针类型)。 int a; const int c_a = 1; const int* p1; p1 = &amp;a; p1 = &amp;c_a; 即const指针既可以指向co...
  • 指针赋值一个数字

    2019-11-29 09:45:50
    //1 #include <stdio.h> int main() { int *ptr; int n = 5;...n就是已分配内存的(int型)的地址 printf("%d",*ptr); } //**************2 #include <stdio.h> int main() { i...
  • 1、指针地址,而不是具体的标量值,这是指针的精髓,不管是一级指针、二级 指针、 整型指针、浮点数指针、结构体指针等等等等所有类型的指针,内容都是个地址,而指针本身当然也是有地址的,而且容易忽略的是,...
  • void* 指针赋值

    千次阅读 2019-10-17 14:04:17
    void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值。例如: int * pint; void *pvoid; pvoid = pint; /* 不过不能 pint= pvoid; */ 如果要将pvoid赋其他类型指针,则需要强制类型转换如...
  • ![图片说明](https://img-ask.csdn.net/upload/201510/27/1445932866_241163.png)这个里面c3是一个指针,可以他赋字符串吗?如果可以那是不是说明字符串只是一个地址呢(的第一个字符的地址
  • 通过函数给指针赋值(一)

    千次阅读 2014-07-31 06:19:10
    1、通过函数某个已经声明并且初始化了的指针变量赋值,涉及到许多关键点,下面通过一些示例来说面。 2、函数要传值,基本上有两种方法:一种是通过指定函数类型,用return返回相应的值;另一种就是...
  • 指针如何赋值?关于指针的理解

    千次阅读 2019-10-12 23:17:46
    今天班上的一个学霸在学习数据结构的字符串的时候遇到了一个问题,这个问题就是他在写代码的时候,不管怎么样Main方法里就是不能够给指针赋值,就算赋值了好像指针里啥都没有,更别说使用其他函数了。 首先声明一下...
  • C++中如何字符指针赋值

    千次阅读 2015-10-28 22:17:09
    p 是 char 型指针,如果不它指向地址,或不它分配存储单元,它是不能读入字符串的。 指向地址的方法: char a[32]; char *p=&a[0]; cin >> (p); cout 分配存储单元的方法: p = (char *) malloc(....); ....
  • 字符指针赋值、传值

    千次阅读 2019-05-13 11:44:58
    1.先来理解一下指针的初始化及赋值 int main() { char *a; cout<<"please input the plaintext"<...a=...是a赋值 ...*a=...是a指向的内存赋值 ...上述代码错误在没有把一个变量的地址赋值给指针 ...
  • 把常量赋值给指针

    千次阅读 2019-09-20 13:28:07
    理论上讲,当我们初始化一个指针或一个指针赋值时,赋值号(=)的左边是一个指针,赋值号(=)的右边是一个指针表达式,在绝大多数情况下,指针的类型和指针表达式的类型是一样的,指针所指向的类型和指针表达式所指向...
  • 如果不是的话,为什么下面的代码会出错: ![图片说明](https://img-ask.csdn.net/upload/201602/22/1456129500_952831.png)
  • x86_64处理器的指针赋值是原子操作吗?

    千次阅读 多人点赞 2020-01-12 19:33:38
    如题, x86_64处理器的指针赋值是原子操作吗? 说实话我很讨厌参与讨论那些似乎不确定东西,倒不是说我对未知不敬畏,而是参与讨论的人大多数都是似懂非懂,对,我说的不确定性指的是参与讨论的人的认知的不确定,...
  • #include void test(int *a) { a[0]=0; a[1]=1; a[2]=2; } int main() { int *a=new int; test(a); std::cout[0]:"[0][0]:"[1][0]:"[2]<<" "<<std::endl
  • 最近碰到一个这样的题:指定了一个地址,比如说0x0312ff7c这样一个地址,要求是这个指定的地址赋一个确定的值,比如说100,之前在汇编里这样用过,在c中还真没用过。今天在网上查了查,自己也在vs上运行了一下,...
  • 这样pr=prr,就不会出现冲突,因为他们都指向一个同类型地址,且pr是个普通指针变量,所以可以赋值。   总结,这就是指针常量和常量指针的问题啦! 更新... 转载于:...
  • 定义指针给数组赋值

    万次阅读 2018-12-18 22:55:58
    #include &lt;stdio.h&gt; int main(void) ... //a代表数组首元素的首地址,即p=&amp;a[0]; int i; for(i=0;i&lt;10;i++) { *(p+i)=i; printf("a[%d]=%d\r",i,*(p+i)); ...
  • c中字符数组,字符串指针赋值的方法总结

    万次阅读 多人点赞 2018-01-12 10:22:48
    怎么这个数组赋值呢?谭浩强的书上明确指出,字符数组可以在定义时整体赋值,不能再赋值语句中整体赋值。 1、定义的时候直接用字符串赋值 char a[10]="hello"; 注意:不能先定义再赋值,如char a[10]; a[10...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 281,865
精华内容 112,746
关键字:

如何给指针赋值地址