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

c语言指针取值

发布时间: 2022-12-19 02:02:47

c语言指针问题

C语言的大多语法都是简单易懂的,这常常会给初学者一种“别人都说C语言难,我看也不过如此”的感觉。但是这种感觉常常会停止在初学者学到指针时,这是一些读者跟我说的。

鉴于很多C语言初学者都觉得指针非常难,

小明定义了一个C语言函数 int f(int * ),为什么 f(&5) 不能正常工作呢?

如果希望传递 5 给函数 f(),在C99中,可以使用下面这种方法:

f( (int[]){5} );
上面这行C语言代码相当于定义了一个数组,并且数组只有一个元素 5,函数 f() 接收到的参数是该数组,只不过这一过程中的数组名没有“显示”。

抛开C99的这个特性,C语言调用 f(&5) 就不能这么写了,而是需要借助变量:

int five = 5;
f(&five);
在C语言中,接受某个值指针的函数是有可能通过该指针修改该值的(即使程序员无此打算,C语言还是会一直这么认为),因此只有变量才能胜任。在C语言中,常数是只读的,只能作为右值,& 运算符是不能处理常数 5 的,f(&five) 会引发编译错误。

f(&five) 会引发编译错误

表达式 * p++ 增加了 p 指向的数值,还是指针 p 本身?

C语言中的 ++ 和 — 运算符的优先级高于 * 运算符,所以 *p++ 其实就相当于 *(p++)。显然,++ 运算符增加的是指针 p 本身的值,不过在指针 p 自增之前,*p++会先返回 p 指向的值。如果希望 ++ 运算符增加 p 指向的值,应该使用括号运算符:(*p)++。

小明想使用指针操作数组里的数值,下面这段C语言代码有什么问题?

小明预计程序会输出 3,但是程序却输出了“垃圾值”,他的C语言代码如下,请看:

int array[5], i, *ip;
for(i = 0; i < 5; i++)
array[i] = i;
ip = array;
printf("%d\n", *(ip + 3 * sizeof(int)));

㈡ c语言如何输出指针所指向的值

需要准备的材料分别有:电脑、C语言编译器。

1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。

㈢ C语言指针/引用/取值

指针是一个存储计算机内存地址的变量。从指针指向的内存读取数据称作指针的取值。指针可以指向某些具体类型的变量地址,例如int、long和double。指针也可以是void类型、NULL指针和未初始化指针。

根据出现的位置不同,操作符  *  既可以用来声明一个指针变量,也可以用作指针的取值。当用在声明一个变量时,*表示这里声明了一个指针。其它情况用到*表示指针的取值。

&是地址操作符,用来引用一个内存地址。通过在变量名字前使用&操作符,我们可以得到该变量的内存地址。

// 声明一个int指针

int*ptr;

// 声明一个int值

int  val = 1;

// 为指针分配一个int值的引用

ptr = &val;

// 对指针进行取值,打印存储在指针地址中的内容

int deref = *ptr;

printf("%d\n", deref);

第2行,我们通过*操作符声明了一个int指针。接着我们声明了一个int变量并赋值为1。然后我们用int变量的地址初始化我们的int指针。接下来对int指针取值,用变量的内存地址初始化int指针。最终,我们打印输出变量值,内容为1。

第6行的&val是一个引用。在val变量声明并初始化内存之后,通过在变量名之前使用地址操作符&我们可以直接引用变量的内存地址。

第8行,我们再一次使用*操作符来对该指针取值,可直接获得指针指向的内存地址中的数据。由于指针声明的类型是int,所以取到的值是指针指向的内存地址存储的int值。

说穿了,指针就是地址吧,这里可以把指针、引用和值的关系类比为信封、邮箱地址和房子。一个指针就好像是一个信封,我们可以在上面填写邮寄地址。一个引用(地址)就像是一个邮件地址,它是实际的地址。取值就像是地址对应的房子。我们可以把信封上的地址擦掉,写上另外一个我们想要的地址,但这个行为对房子没有任何影响。

㈣ C语言指针问题。

这是一个运算顺序的问题。注意括号的运用。
(1) ++(*pointer)是先取值,再自增,当前pointer指向的是位置arr[3],取值后是2,*pointer的结果是2,2再自增,当然会得出3。
值得说明的是,这个括号是可以省略的,此处括号只起到增加程序可读性的作用。
(2)*(pointer-2)是先移动指针,再取值。pointer-2是把指针从当前位置arr[3]回退两个位置,指向了arr[1],再取值,也就是取出的元素6。
当然,这个括号是不可省略的。
还有不明白之处,请留言。

㈤ 关于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语言指针问题

首先,你提到的所有p应该是一个类型,也就是
int *p
即,整型指针类型,该类型与一维整型数组等效,即int []
然后一个个来
第一个,只有用在定义的时候才是对的,
int *p=a;意思是定义int*类型的p,初始化为a。等效于int *p;p=a;
第二个,先p+5,然后取值,等效于p[5],在p=a下,也就是a[5],这里其实是越界的,知道是这个意思就好
第三个,先取值,在值加2,p=a时,*p为a[0],这个就是a[0]+2
第四个和第五个类似,如果p=a,那么四五完全等同,都是a[2]的地址
最后一个,对a[5]先取地址再取值,最终还是a[5],这个和第二个是等价的,当然,也一样是越界

㈦ C语言中指针是什么意思

1.指针就是1个变量,他也是一个存放内容的内存空间。
2.指针存放的内容是另一个内存空间的起始地址。不同于一般变量存放的就是变量值。
3.取值操作符*对于指针的作用是取得指针变量存放的内存地址里面的值,不加*取出的是指针变量存放的值(就是一个内存地址)

上面3步,step by step 你就理解了.

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

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

㈨ c语言用指针取值比用数组名取值快吗

指针快
只不过现在计算机快了,几乎没有区别。

㈩ 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都是整形,所以可以一定程度上转换