c语言指针的赋值
㈠ c语言程序设计指针变量赋值
C语言 形式逻辑不成立(C语言的缺点!)。
int a[ 10] ,*p=a; 是声明,声明中 *p=a 表示p是指针,初始化把专a数组的首地址赋给它。
*p=a;是属语句,不是声明,形式一样,就不行了!
因为 语句 里,*p 表示p 指向的 值。
同样的形式,意思不同,形式逻辑不成立,(C语言的缺点!)。
初学者,人人遇到这个问题!
㈡ c语言 指针如何赋值
指针的赋值
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
㈢ c语言中能把指针变量赋值给指针变量嘛
指针时用来存放地址的!地址就是个常数啊!所以这样是能编译通过的!内
但是,这样容执行会出错(段错误)的!因为指针本来是存放地址的,而你却存放了一个常数(即一个不合法的地址),这样就会使指针指向不确定的内存单元(非法访问),从而出现错误!
㈣ C语言指针怎么赋值呢
要改p–>a的值,和在这个函数里面是一样的
直接
p–>a=要赋值的值
这样就可以了
唯一需要注意的就是要赋值的是结构体指针还是结构体变量,如果不是指针那就要改成点了
p.a这样
㈤ C语言中可以给指针变量赋值常数吗
C语言中可以给指针变量赋值常数。
如:
char *p,a='5';
p=&a;
p="abcd";
解析:
P申请了空间(在常量区),存放了字符串,所以最后可以返回地址。
以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写
"abcd",那么编译器帮你存储的是"abcd "。
(5)c语言指针的赋值扩展阅读
1、定义指针变量的一般形式如下:
类型名*指针变量名1,*指针变量名2,... *指针变量名n ;
2、空指针
空指针是一个特殊的指针,它的值是0,C语言中用符号常量NULL(在stdio.h中定义)表示这个空值,并保证这个值不会是任何变量的地址。空指针对任何指针类型赋值都是合法的。一个指针变量具有空指针值表示当前它没有指向任何有意义的东西。
3、void指针
(void *)类型的指针叫通用指针,可以指向任何的变量,C语言允许直接把任何变量的地址作为指针赋给通用指针。
但是需要注意void*不能指向由const修饰的变量,例如const int test; void * ptv; ptv = &test;第三句是非法的,只有将ptv声明为const void * ptv;,上述第三句ptv = &test才是合法的。
当需要使用通用指针所指的数据参加运算时,需要写出类型强制转换。如通用指针ptv 所指空间的数据是整型数据,p是整型指针,用此式转换:p=(int *)ptv;
㈥ 关于c语言指针变量的赋值
p=&a;
//p指向a
q=&b;
//q指向b
w=q;
//w与q相同,指向b
q=NULL;
//q置空
*p=*w;
//把w指向的对象的值赋给p指向的对象的值,就是把b赋给a
结果就是a=3
㈦ 关于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。
㈧ 在C语言中能否直接给指针指向的数据赋值为什么
可以,但int *p;*p=7;这样不行。
因为“能直接给指针指向的数据”赋值,而这里的p还没有指向,所以不专能赋值,这种指针属有个名字叫“悬浮指针”,是不能给它赋值的。
这样才可以:
int a,*p=&a;*p=7;
实际上就是使a等于了7。
(8)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;
㈨ C语言指针赋值
指针还有基类型
a的指针基类型是char (*)[5],显然和指针p的char *是不同的,
如,此处的a+1和(char *)a+1值是不同的
㈩ 请问C语言这个指针要怎么赋值
你是抄要找一个字符还是袭找字符串的?根据你打印的程序来看应该是找一个字符。那么find_char中就可以写成:
char
*p_return;
int
i;
for(i=0;
source[i]!=NULL;
i++)
{
if(source[i]
==
*chars)
{
break;
}
}
p_return
=
source+i;
return
p_return;