① 关于c语言指针的简单的例子
p++就是每次把地址加一,那么你scanf()以后输入的内容放到的是地址增加的指针里面,这样就完成了自动*(p+i)=a[i]的过程。
② c语言里,如何把指针变量的地址赋给一个变量
指针变量的地址只能赋给指针变量。
#include "stdio.h"
int main()
{double pi=3.1415926,*p,**q;
p=π/*把double变量的地址赋给p */
q=&p; /*把指针变量p的地址赋给q */
printf(" pi=%.7lf *p=%.7lf **q=%.7lf ",pi,*p,**q); /*检查赋值的效果 */
system("pause");
return 0;
}
③ C语言指针指定地址
首先,不能这样做,你c语言操作的地址并不是真实的地址,是操作系统从内存的某一段虚拟给你的地址,每次都不一样,每个程序所使用的内存互不干扰。
第二,而你的程序退出后,所拥有的空间就被系统全部回收了。也就不存在了。否则,你c语言乱改一通,要是改到系统正在用的内存,系统不就出现异常了吗。内存并不是由你管理的,而是操作系统管理的。
假设 a程序的 p指针,指向 0xaaa地址 ,你修改 b程序的 p指针,指向0xaaa,也是无法修改的,每个程序的内存都是系统虚拟的。保证程序可以安全稳定的执行。
④ C语言 多级指针 指针变量赋地址值的方式
**p就是一个双重指针啊,意思就是说这个指针变量里面放的是一个指针的地址(一般的指针变量里面放的是一个变量的地址),这么说不知道你明不明白。
通过指针变量获得地址值:
int
**p;//双重指针
int
*q;//普通指针
p=&q;//将指针q的地址赋值给p
通过标准函数获得地址值:
int
**p;
p=(int*)malloc(n*sizeof(int*));//动态创建n个int类型的指针变量空间
其实说白了双重指针就是二维数组的头指针,数组的每一行的开头就是那一行所代表的一维数组的指针,二维数组头指针就是每一行的头指针的地址数组。
哇
我自己都觉得指针这个东西好绕。。。。不过多用就明白了。
⑤ C语言中的指针*和取地址&,谁能真正明了的告诉我用法,请举一个例子,
*的意义较多,只有放在指针前面时才是取指针指向的目标变量的值。&也有两个作用,只有放在变量前面且左值变量是匹配的指针时才是取变量地址的意思。如:
int *p,x=3,y;——要注意,这里p前的*不是p的而是int的,是声明了一个int *型指针p。
若再写p=&x;,这就是把x的地址赋给p;若再写y=*p;,那就是把p指向的x的值3赋给变量y。
⑥ c语言在对指针*P在进行赋值时,什么时候用变量名赋值,什么时候用变量的地址赋值比如下面的例子
int * 类指针变量即可以指向一个int,也可以是int数组。
同理 char * 类指针变量即可以指向一个char也可以指向字符串。
因为指针变量指向的数据不限定长度的,比如int *p ,那么这个p可以保存一个int变量的地址,也可以保存int一维数组的首地址,本质一样的,因为一个变量的地址类型与一维数组地址类型相同。
C/C++编译器不负责边界越界检查,这个工作由程序员负责,换句话说,编译器无法根据一个指针判断指向的内存是单个变量还是数组。
以上是指针赋值的要求,其实很简单,类型一致就可以赋值。
取地址部分
对于单个变量,需要取地址时,必须用&显式地告诉编译器,否则编译器隐式转换按取值处理,即默认取值。
对于数组,如果不给定索引只给数组名,则默认取地址,因为编译器无法确定你要取那个元素,
因此如果要赋值给指针,对于单个变量,那么只用变量名就是取值,包括指针变量(指针赋值给指针),要取地址需要加&。对于数组直接赋值即可。
重点:等号左右两边类型要一致,即左右值类型要相同。
⑦ C语言中,给指针赋值或者赋予地址的几个写法的辨析
*p=&r;//*p是double类型,&r是double*类型,二者不匹配,错的
*p=r;//*p是double类型,r是double类型,二者匹配,对的
p=r;//p是double*类型,r是double类型,二者不匹配,错的
p=&r;//p是double*类型,&r是double*类型,二者匹配,对的
1 2 3 '