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

c语言指针合法地址

发布时间: 2023-06-03 18:08:16

c语言指针和常规变量,地址和值的相互赋值有什么是合法的和不合法的

char a[5]="abcd";这样是合法的;
*a="abcd",a="abcd"都不合法,因为*a只是一个字符的空间。a代表的是a[]的地址;
*a='c';这样是可以的;

❷ C语言中指针的地址问题

首先我要指出的是根指针的地址与指针存储的地址一般不可能相同~!(一楼列出的情况除外,将指针的地址赋给一个变量再纤宴将变量的地址赋给指针)

举个例子:
int number,*p;
number=1;
p=&number;

你可以这样理解,number 和 *p都是一个整型数据变量,程序在内存中

为它们都保留了一个地址(两个不同的地址),用以存放它们的值,在

number的毁歼银地址中保存的值是1,在*p的地址中保存的值是number的地址!

你也可以用 &p 求出*p 的根地址。(一般只改让在二维及以上数组、链表等高级主题中用到指针的根地址)

❸ C语言中,指针指向的地址.那个地址是什么地址

那个地址 是被指向的变毕耐量的地址。
当指针刚声明完毕时,它并无指向的地址,只有当指针与 某有存储地址的变量发生联系时,才有指向地址。
例如:
int *p; // 这时 p 没有指向地址
int a=3,b=14;
p = &a; 这时 p 指向了 变量 a 的地址了.
// 数值 *p 等于 a 里存放的数值。 printf("%d", *p); 得升棚 3。
这手笑春时,若 a = a+1; 输出 printf("%d", *p); 得 4。
p = &b; p 指向了 变量 b的地址 了,输出 printf("%d", *p); 得 14 啦。

❹ c语言全面解析指针,十个知识点整理

C语言10个小知识了解指针

1.若有代腔亏码,int a=10,*p;p是指针:也是一个变量,且是一个只能用来存放地址的变量。

2.若有代码,int a=10,*p;p=&a;当执行了上面的代码,会说“p指向了a”,其实就是“p指针变量存放了a的地址”。

3.两个*的区别,有如下代码:inta=10,*p;//该处的* 说明p是一个指针变量用来存放地址p=&a;*p=*p+1;//该处的* 表示p所指的变量中的值即a的值10。

总结: 变量定义时的* 说明该变量是一个指针,调用语句中的*表示指针指向的变量中的值。[此处是比较容易混淆的]。

4.int a=10,*p;p=&a;则:*p=*p+1;//等价:*p +=1;(0)++++(*p);表示的内容相同,都是p所指变量的值+1。

5. *p++和(*p)++的区别是: 等价于* (p++),先获取 p当前所指元素的值,然后p指针+1(p指针向后移动一个单元,一般用在数组中,普通变量会越界);后者仅仅是p所指变量的值+1。

6.定义变量时,一个*说明该变量是指针,两个*说明该变量是指向指针的指针(存放的是指针变量的地址)。int a=10,*p,**q;p=&a;//p指向a,*p的结果是10,q=&p;//q 指向p,* q的结果是p的地址值,**G的结果才是10。

7.如果调用函数传递的是地址,那么被调函数中形参就需要使用指针接收,在函数中对指针所指变量值的改变,会影响到调用函数中的变量值。

8.一维数组名和指针的区别,有定义:int a[10],*p;

p=a;//合法,因为,一维数组名存的是数组首地址,这样使 p指向了a首地址,也就是第一个元素的地址。

a++; / /不合法,因为a是一个地址常量,开辟了就不能再修改了,一切给数组名字赋值的操作都是非法的。

p++://合法,因为p是一个指针,p++表示从当前向后移动了一个位置。

对于上面的定义,a[i] 、* (ati)、* (p+i)、p[] 都是茄告合法,都是取下标为i的元素值。所以: p++; 是使指针向后移动,(*p) 十+是当前所指变量的值内容+1。

9.若有定义:int a[3][22],*p[3],iJ;*p[3] 中[优先级[高于*,说明p是一个数组名,前面的*说明该数组中每个元素都用来存放指针,这叫指针数组。如果p和a产生联系,则只能通过逐个伍纳神赋值的方式完成,即: for(i=0;i<3;i++)p[] =a[; //合法,因为a[] 是二维数组中每行的首地址,所以可以存放到p数组中。

但是 p=a;是非法的,因为a是地址,p是数组的名字,并不是指针名下面获取数组元素的方式都是合法的:*(p[i]+j)*(*(p+i)+j) (*(p+i))[j]。

10.若自定义函数的实参是一维数组名,则该函数的首部可以写成: fun(int al) fun (int a[M]) fun(int*a) M表示长度,若有自定义函数的实参是二维数组名,则该函数的首部可以写成: fun(int (*a)[N])。

fun(int al[N]) fun(int a[M][NJ) M表示行数,N表示列数,若有指针数组作为fun函数的实参,则该函数的首部可以写成:fun(int *a[M]) fun(int *al) fun(int**a)。

❺ C语言指针指定地址

首先,不能这样做,你c语言操作的地址并不是真实的地址,是操作系统从内存的某一段虚拟给你的地址,每次都不一样,每个程序所使用的内存互不干扰。
第二,而你的程序退出后,所拥有的空间就被系统全部回收了。也就不存在了。否则,你c语言乱改一通,要是改到系统正在用的内存,系统不就出现异常了吗。内存并不是由你管理的,而是操作系统管理的。

假设 a程序的 p指针,指向 0xaaa地址 ,你修改 b程序的 p指针,指向0xaaa,也是无法修改的,每个程序的内存都是系统虚拟的。保证程序可以安全稳定的执行。

❻ C语言里面的地址是什么意思,指针指向一个变量的地址

C语言里面的地址实际上就是一个内存单元的编号,计算机一般是以一个字节为最小的存储单元的,每个字节就给它编一个编号,这个编号就是这个字节的地址,这个编号也就是地址是具有唯一性的。指针指向一个变量的地址,这个类似于,通过知道房间号就可以确定这个房间的具体位置是一样的道理,这个房间编号就是房间的地址。