当前位置:首页 » 编程语言 » c语言取指针的值
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言取指针的值

发布时间: 2022-04-20 17:37:45

A. 在c语言中int **p,如果想取它的值,用*p来表达吗

不是。
语句int **p;定义的p是二级指针,也就是,“指向指针的指针”,所以,用*p取出来的,仍然是一个地址。要想取出存放的用户数据,必须要用**p,才可以。
另外,你题目中的叙述有点问题,就是那个“它”指的是谁,是p吗?
现在分析一下:
当你用int **p;声明一个变量时,系统会给变量p分配一个储存空间,分配完后,可以用&p查看这个变量的位置。但是,它是一个空指针,不管用*p还是**p都只会得到乱码,没有实际作用。
但是你可以使用它,比如你有定义两个变量:
int a=5,*b;
并且再给b和p赋值:
b=&a;
p=&b;
那么,你就可以用:
p得到p的值(里面存的b的地址)
*p得到b的值(里面存的a的地址)
**p得到a的值(5)
所以,你确定是要p的值吗?直接用p就可以。要想a的值,就要用**p了。
不知说明白没有,如果有什么问题请留言。

B. 关于c语言中指针操作字符串和指针取值的问题

问题一里,如果你想打印字符串,printf第二个参数应该是地址而不是地址里的内容,
如果你想打印一个字符,应该是%c而不是%s
应该写为printf("%s\n",(buf+1)); 或者 printf("%c\n",*(buf+1)); (输出是e)
问题二和一应该是同样的错误
printf("%s\n",p);是打印整个字符串'test'
如果你只打印一个字符,比如s
printf("%c\n",*(p+2));

C. C语言如何把指针指向的值赋值到变量上。。。

str1是个常量指针,不能对他进行赋值操作, 用也应该写成p=str1; 另外初始化的话一般是char* p=NULL; 或者char* p; p=NULL;

D. c语言中指针怎么使用

1、使用场景

使用指针时,必须将它指向一个变量的地址或者为它分配空间方能使用,如下所示:

#include<stdio.h>

#include <stdlib.h>

int main(int argc, char const *argv[])

{

int a[5]={0,1,2,3,4};

int *b,*d;

int c=2;

int *e=a; //e指向a数组首地址

//*b=2; 无法直接初始化

//printf("%d ", *b);

e=e+2; //移动两个地址单元

d=&c; //d指向c的地址来表示值

c=4; //修改原c变量的值,d指针的值会发生改变

b=(int *)malloc(sizeof(int));//为b分配一个int型空间来直接存储

*b=2;//分配空间后可以直接赋值了

printf("this is e,b,c,d :%d %d %d %d ",*e,*b,c,*d);

2、类型说明

(1)int *a :表示一个指向int型变量的指针,指向的是变量的地址单元

(2)char *b:表示一个指向char变量的指针

*a表示的是这个指针指向地址的值,a为此指针本身的地址,这点要明确,一般用*(a+1)、*(a+2)来表示值,如:

int nums[5]={0,1,2,3,4};

int *a=nums;

printf("%d %d %p ",*a,*(a+1),a);

(4)c语言取指针的值扩展阅读:

指针的运算

指针指向变量地址,若原变量的内容发生了变化,它本身也会发生变化,指针之间的运算一般为值运算和地址运算

(1)值运算:直接通过*运算方式,像a+*(a+1),结果为第一个元素与第二个元素相加。

int nums[5]={0,1,2,3,4};

int *a=nums;

(2)地址运算:通过a+i的方式.指针会指向a的下i个地址。

int nums[5]={0,1,2,3,4};

int *a=nums;

a=a+2;

printf("%d ",*a);

结果输出2。

参考资料来源 :指针-网络

E. c语言中指针变量取值问题,c语言初学者,求指点

总共12个4字节,每次加一代表移动一个4字节,确实没有错.
你所有的数据总共是12个,移动4次后换行,也就说12个数字会分成3行打印,每行4个数字,
这个4次和一个int的4字节没有关系.

F. c语言 指针 取值

首先更正一下楼主错误,int 型的指针不可以用来获取char型的地址的,这样会产生错误,如果你的编译系统没有报错,实际上也有错误。

第二,字符串实际上就是等于字符数组。
ptr = &str[2];
printf("%d",ptr);
reptr = *(ptr);
printf("%c",reptr);

printf("\n");
这个可以输出的。就是C
ptr = &str[2];
printf("%c",*(ptr+1));
输出的是第4个字符‘/0’就是“空”,可能楼主由此判断无法输出
ptr = &str[1];
printf("%c",*(ptr+1));
就能输出C了

int *应该不可以,不过 int的话就可以
char str[4] = "abc";
int ptr;
char reptr;

ptr =(int)&str[0];
printf("%d",(char *)ptr);
reptr = *((char *)ptr);
printf("%c",reptr);

printf("\n");

实际上利用强制类型转换,用int来存数据,意义上char 和int都是整形,所以可以一定程度上转换

G. 关于C语言中指针赋值的问题

你这样想说明你还没有真正理解内存和指针。int a;表示编译器随机取出一个空闲的地址分配给a,不妨设为00000000,长度为sizeof(int),不同编译器可能不同。int *p;也表示随机取出一个空闲的地址分配给p,不妨设为000000f0,长度一般为4个字节,则这四个字节现在存储的内容是不确定的,假设为00000ff0,那么*p表示地址00000ff0上的值。*p=a则把地址00000ff0的值变为a的值,显然如果该地址目前正在被某个进程使用,就有可能破坏该进程,因此这种方法是十分危险的。给指针赋值一般有两种方法,一种是将已经存在的变量的地址传递给指针,格式为:p=&a;另一种是首先为指针申请指向的合法内存,C语言中用函数malloc(),然后给已申请的地址赋值,如*p=6。

H. C语言输出指针的值.

把pAdd打印到字符串里。
盗用一些楼上代码哈~
#include
<windows.h>
#include
<string.h>
void
main()
{
char
*pAdd;
char
str[20]
=
{0};
sprintf(str,
"%08x",
(long)
pAdd);
MessageBox(NULL,str,"My
程序",MB_OK);
}

I. 在C语言中能否直接给指针指向的数据赋值为什么

可以,但int *p;*p=7;这样不行。

因为“能直接给指针指向的数据”赋值,而这里的p还没有指向,所以不能赋值,这种指针有个名字叫“悬浮指针”,是不能给它赋值的。

这样才可以:

int a,*p=&a;*p=7;

实际上就是使a等于了7。

(9)c语言取指针的值扩展阅读:

注意事项

也可以使用赋值运算符为指针变量赋值,但要保证两个指针变量的类型相同。

假设有如下变量定义:

int i,j,*p,*q;p=&i;q=&j;

这两句将变量i和j的地址分别赋值给指针变量p和q;

执行了q=p后,执行该条语句,指针变量p和q都指向了同一个变量i,因此指针变量p和q中存放的都是变量i的地址&i。变量i此时并没有初始化,只为其分配了内存单元。

注意理解:q=p;和*q=*p

前者为指针变量q赋值,即将指针变量p中存放的某个变量的地址赋值给q。显然,赋值后,q和p就指向了同一个变量。

后者将p指向变量的赋值给q指向的变量。

例子:

p=&i;

q=&j;

i=2;

j=3;

J. C语言中的指针

先给你解释一下指针变量和指针,还有指针变量指向的变量的分别意思。
指针变量的值是指针,指针就是地址;指针变量指向的变量就不是地址了,而是一个具体的变量。
看一个很简单的程序段:
main()
{
int
a=5,*p=&a;
printf("%d",*p);}
在这里,定义了指针变量p,指针变量p又被赋予了a的地址,此时a的地址就是指针变量p的值;而*p就是指针变量指向的变量,此处是整型变量,由于p被赋予的是a的地址,所以说这个变量就是a,即*p=a.接着因为a被赋予了5,也就是*p就是为5.
这样你就可以理解*n=0是什么意思了,也就是n是一个指针变量,这个指针变量指向的变量是一个整型变量,*n就是一个整型变量,*n这个整型变量被赋值为0;
然后是你的第二个问题:*n++,因为*和++是同优先级,并且是自右向左运算(你查下书的附录可知),所以说,相当于*(n++),意思是取了*n这个值之后,再n++,即往下一个地址去,然后接着取这个地址的值;再n++....一直往下取。
而(*n)++呢,就是先取了*n这个值之后,然后再把*n这个值自增1.
如果不明白,建议多看几遍书哦!